| 123456789101112131415161718192021222324252627282930 |
- # frozen_string_literal: true
- require './lib/api_error/base_error'
- class CreatePokemonFromBase64Service < BaseService
- def execute(base64_encoded_pokemon)
- response = client.parse_base64(base64_encoded_pokemon)
- pokemon = ::Pokemon.transaction do
- ::Pokemon.create!(response.pokemon.map(&:to_h))
- end
- success(pokemon)
- rescue PKParse::Error => e
- error(APIError::BaseError.new(e.message, internal_error: e))
- rescue ActiveRecord::ActiveRecordError => e
- PKParse.logger.error("Failed to commit parsed results: #{e}\n#{e.backtrace.join("\n")}")
- error(APIError::BaseError.new('Failed to commit the uploaded pokemon.', internal_error: e))
- end
- private
- def success(pokemon)
- super().merge(pokemon: pokemon)
- end
- def client
- @client ||= PKParse::Client.new
- end
- end
|