diff --git a/app/controllers/pokemons_controller.rb b/app/controllers/pokemons_controller.rb index c3b2bbb..7724698 100644 --- a/app/controllers/pokemons_controller.rb +++ b/app/controllers/pokemons_controller.rb @@ -4,12 +4,12 @@ class PokemonsController < ApplicationController before_action :authenticate_user! def create - @pokemon = Pokemon.new(pokemon_params) - if @pokemon.save - render json: @pokemon, status: :created - else - render json: @pokemon.errors, status: :unprocessable_entity - end + @pokemon = Pokemon.new(pokemon_params) + if @pokemon.save + render json: @pokemon, status: :created + else + render json: @pokemon.errors, status: :unprocessable_entity + end end def search @@ -21,38 +21,37 @@ def list render json: Pokemon.all end - def update - if @pokemon.update(pokemon_params) - render json: @pokemon - else - render json: @pokemon.errors, status: :unprocessable_entity - end - end + def update + if @pokemon.update(pokemon_params) + render json: @pokemon + else + render json: @pokemon.errors, status: :unprocessable_entity + end + end - def destroy - @pokemon.destroy - render json: { message: 'Pokemon was successfully destroyed.' } - end + def destroy + @pokemon.destroy + render json: { message: 'Pokemon was successfully destroyed.' } + end - def fetch_all_pokemon_data - response = HTTParty.get("#{POKEMON_API}?limit=10000") - if response.code == 200 - render json: JSON.parse(response.body) - end - end + def fetch_all_pokemon_data + response = pokemons_service.all_pokemons + render json: response + end - def species - name = params[:name] - data = fetch_pokemon_species_data(name) - if data[:error] - render json: { error: data[:error] }, status: :not_found - else - description = find_english_description(data) - render json: { description: description } - end - end + def species + name = params[:name] + data = fetch_pokemon_species_data(name) + if data[:error] + render json: { error: data[:error] }, status: :not_found + else + description = find_english_description(data) + render json: { description: description } + end + end private + def fetch_pokemon_data(pokemon_name) response = HTTParty.get("#{POKEMON_API}/#{pokemon_name}") if response.code == 200 @@ -87,4 +86,8 @@ def set_pokemon def pokemon_params params.require(:pokemon).permit(:nome, :tipo, :imagem, moves: []) end + + def pokemons_service + PokemonsService.new(PokemonsApiRepository.new) + end end diff --git a/app/presenters/pokemons_presenter.rb b/app/presenters/pokemons_presenter.rb new file mode 100644 index 0000000..16c8f6a --- /dev/null +++ b/app/presenters/pokemons_presenter.rb @@ -0,0 +1,12 @@ +class PokemonsPresenter + def initialize(pokemon) + @pokemon = pokemon + end + + def as_json + { + name: @pokemon.nome, + url: @pokemon.imagem + } + end + end \ No newline at end of file diff --git a/app/repositories/pokemons_api_repository.rb b/app/repositories/pokemons_api_repository.rb new file mode 100644 index 0000000..4694912 --- /dev/null +++ b/app/repositories/pokemons_api_repository.rb @@ -0,0 +1,17 @@ +class PokemonsApiRepository + POKEMON_API = "https://pokeapi.co/api/v2/pokemon" + + attr_reader :url, :limit + + def initialize(limit = 10000) + @url = POKEMON_API + @limit = limit + end + + def fetch_all_as_json + response = HTTParty.get("#{url}?limit=#{limit}") + if response.code == 200 + response.body + end + end +end diff --git a/app/repositories/pokemons_repository.rb b/app/repositories/pokemons_repository.rb new file mode 100644 index 0000000..373e115 --- /dev/null +++ b/app/repositories/pokemons_repository.rb @@ -0,0 +1,30 @@ +class PokemonsRepository + require_relative "../presenters/pokemons_presenter" + + def initialize(model = Pokemon) + @model = model + @presenter = ::PokemonsPresenter + end + + def fetch_all_as_json + pokemons = all + { + count: pokemons.count, + next: nil, + previous: nil, + results: pokemons.map { |pokemon| @presenter.new(pokemon).as_json }, + }.to_json + end + + def all + @model.all + end + + def find_by_name(name) + @model.find_by(nome: name) + end + + def find_by_id(id) + @model.find(id) + end +end diff --git a/app/services/pokemons_service.rb b/app/services/pokemons_service.rb new file mode 100644 index 0000000..828308e --- /dev/null +++ b/app/services/pokemons_service.rb @@ -0,0 +1,11 @@ +class PokemonsService + + def initialize(repository = PokemonsRepository.new) + @repository = repository + end + + def all_pokemons + JSON.parse(@repository.fetch_all_as_json) + end + +end