create_pokemon_from_base64_service.rb 825 B

123456789101112131415161718192021222324252627282930
  1. # frozen_string_literal: true
  2. require './lib/api_error/base_error'
  3. class CreatePokemonFromBase64Service < BaseService
  4. def execute(base64_encoded_pokemon)
  5. response = client.parse_base64(base64_encoded_pokemon)
  6. pokemon = ::Pokemon.transaction do
  7. ::Pokemon.create!(response.pokemon.map(&:to_h))
  8. end
  9. success(pokemon)
  10. rescue PKParse::Error => e
  11. error(APIError::BaseError.new(e.message, internal_error: e))
  12. rescue ActiveRecord::ActiveRecordError => e
  13. PKParse.logger.error("Failed to commit parsed results: #{e}\n#{e.backtrace.join("\n")}")
  14. error(APIError::BaseError.new('Failed to commit the uploaded pokemon.', internal_error: e))
  15. end
  16. private
  17. def success(pokemon)
  18. super().merge(pokemon: pokemon)
  19. end
  20. def client
  21. @client ||= PKParse::Client.new
  22. end
  23. end