vanderleipinto / TT4

0 stars 0 forks source link

feat: Alteração do arquivo movies_controller.rb #8

Closed vanderleipinto closed 5 months ago

vanderleipinto commented 5 months ago

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

  • 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.