create_pokemon_from_base64_service.rb 787 B

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