O arquivo app/controllers/movies_controller.rb foi criado automaticamente com as actions necessárias para uma API. Agora faremos algumas alterações para o funcionamento do sistema de acordo com nossas necessidades.
Criação da action read_csv.
Responsável pela
Leitura do arquivo csv
Conversão o valor do campo date_added(string) para Date
Modificão da key type para genre para se adequar ao banco de dados.
def read_csv
csv_data = []
CSV.foreach('app/data/TT_ 4 - netflix_titles.csv', headers: true) do |row|
csv_data << row.to_hash
end
#converte o valor do campo date_added(string) para Date modifica a key type para movie_type
csv_data.each do |item|
item['genre'] = item['type']
item.delete('type')
item['date_added'] = Date.strptime(item['date_added'],"%h %d, %y")
end
#insere todos os valores no Banco de Dados
csv_data.each do |movie_data|
Movie.create(movie_data)
end
render json: Movie.all
end
A sequir ele faz a leitura do arquivo csv. Transforma em hash e insere na array csv_data
csv_data = []
#Leitura do arquivo csv. Transforma em hash e insere na array csv_data
CSV.foreach('app/data/TT_ 4 - netflix_titles.csv', headers: true) do |row|
csv_data << row.to_hash
end
Obs: o CSV é da gem 'csv'.
Então faz-se a conversão do valor do campo date_added(string) para Date e modificação da key type para movie_type
#converte o valor do campo date_added(string) para Date modifica a key type para movie_type
csv_data.each do |item|
item['genre'] = item['type']
item.delete('type')
item['date_added'] = Date.strptime(item['date_added'],"%h %d, %y")
end
Agora é só percorrer a hash e inserir no banco de dados, seguindo o código abaixo.
#insere todos os valores no Banco de Dados
csv_data.each do |movie_data|
Movie.create(movie_data)
end
Alteração da action index
def index
@movies = Movie.select(:id, :title, :genre, :release_year, :country , :date_added, :description ).order(:release_year)
# Filtragem por ano
@movies = @movies.where("genre like ? and country like ? and release_year like ?" ,"%#{params[:genre]}%", "%#{params[:country]}%", "%#{params[:release_year]}%")
render json: @movies
end
A variável @movies vai consultar o banco de dados fazendo um select somente para os dados que queremos:
@movies = Movie.select(:id, :title, :genre, :release_year, :country , :date_added, :description ).order(:release_year)
A sequir temos a filtragem dos dados de acordo com os parâmetros recebidos:
@movies = @movies.where("genre like ? and country like ? and release_year like ?" ,"%#{params[:genre]}%", "%#{params[:country]}%", "%#{params[:release_year]}%")
E então renderizamos o resultado em formato de json.
Alteração do arquivo movies_controller.rb
O arquivo app/controllers/movies_controller.rb foi criado automaticamente com as actions necessárias para uma API. Agora faremos algumas alterações para o funcionamento do sistema de acordo com nossas necessidades.
Criação da action read_csv.
Responsável pela
A sequir ele faz a leitura do arquivo csv. Transforma em hash e insere na array csv_data
Obs: o CSV é da gem 'csv'.
Então faz-se a conversão do valor do campo date_added(string) para Date e modificação da key type para movie_type
Agora é só percorrer a hash e inserir no banco de dados, seguindo o código abaixo.
Alteração da action index
A variável @movies vai consultar o banco de dados fazendo um
select
somente para os dados que queremos:@movies = Movie.select(:id, :title, :genre, :release_year, :country , :date_added, :description ).order(:release_year)
A sequir temos a filtragem dos dados de acordo com os parâmetros recebidos:
E então renderizamos o resultado em formato de json.