Class ShelterEntityServiceImpl

java.lang.Object
diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
All Implemented Interfaces:
ShelterEntityService

@Service public class ShelterEntityServiceImpl extends Object implements ShelterEntityService
Esta classe é responsável pela implementação dos métodos necessários para gerenciar abrigos no sistema.
Since:
1.0.0
Author:
diegoneves
See Also:
  • Field Details

    • SHELTER_CREATION_ERROR_MESSAGE

      public static final Integer SHELTER_CREATION_ERROR_MESSAGE
    • USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR

      public static final Integer USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR
    • REQUEST_VALIDATION_ERROR_MESSAGE

      public static final Integer REQUEST_VALIDATION_ERROR_MESSAGE
    • RESPONSIBLE_USER_PROFILE_INVALID

      public static final Integer RESPONSIBLE_USER_PROFILE_INVALID
    • RESPONSIBLE_USER_ALREADY_IN_USE

      public static final Integer RESPONSIBLE_USER_ALREADY_IN_USE
    • DONATION_VALIDATION_ERROR

      public static final Integer DONATION_VALIDATION_ERROR
    • EMPTY_DONATION_LIST

      public static final Integer EMPTY_DONATION_LIST
    • RESPONSIBLE_EMAIL_NOT_ASSOCIATED_WITH_SHELTER

      public static final Integer RESPONSIBLE_EMAIL_NOT_ASSOCIATED_WITH_SHELTER
    • CLASS_MAPPING_FAILURE

      public static final Integer CLASS_MAPPING_FAILURE
    • SHELTER_CREATION_SUCCESS_LOG

      public static final String SHELTER_CREATION_SUCCESS_LOG
      See Also:
    • SHELTER_CREATION_FAILURE_LOG

      public static final String SHELTER_CREATION_FAILURE_LOG
      See Also:
    • RESPONSIBLE_USER_VERIFICATION_ERROR_LOG

      public static final String RESPONSIBLE_USER_VERIFICATION_ERROR_LOG
      See Also:
    • USER_NOT_FOUND_ERROR_LOG

      public static final String USER_NOT_FOUND_ERROR_LOG
      See Also:
    • SHELTER_DATA_MAPPING_FAILED_LOG

      public static final String SHELTER_DATA_MAPPING_FAILED_LOG
      See Also:
    • repository

      private final ShelterRepository repository
    • shelterServiceContract

      private final ShelterServiceContract shelterServiceContract
    • addressService

      private final AddressEntityService addressService
    • userEntityService

      private final UserEntityService userEntityService
    • donationEntityService

      private final DonationEntityService donationEntityService
  • Constructor Details

  • Method Details

    • createShelter

      public ShelterCreatedResponse createShelter(ShelterCreationRequest request)
      Este método é responsável por criar um novo abrigo no sistema. Ele recebe um objeto ShelterCreationRequest, que contém as informações necessárias para criar o abrigo, como o nome do abrigo, o endereço e o e-mail do usuário responsável por criar o abrigo.

      Internamente, este método realiza as seguintes operações:

      1. Cria uma nova instância de ShelterContract através do método createAndReturnShelterInstance, utilizando as informações do objeto ShelterCreationRequest fornecido.
      2. Mapeia o objeto ShelterContract criado para um objeto ShelterEntity e o salva no repositório do sistema utilizando o método mapShelterAndSaveToRepository.
      3. Constrói uma resposta para a criação do abrigo utilizando o objeto ShelterEntity salvo e o retorna.
      Specified by:
      createShelter in interface ShelterEntityService
      Parameters:
      request - um objeto ShelterCreationRequest contendo as informações necessárias para criar um novo abrigo.
      Returns:
      um objeto ShelterCreatedResponse contendo as informações do abrigo criado.
      Throws:
      ShelterEntityFailuresException - se ocorrer algum erro durante a criação do abrigo. Isso pode acontecer se o usuário responsável não for encontrado, se houver um erro na criação do endereço ou se houver um erro na criação do abrigo em si.
    • convertShelterContractToEntity

      private static ShelterEntity convertShelterContractToEntity(ShelterContract shelterContract) throws ShelterEntityFailuresException
      Converte um contrato de abrigo (ShelterContract) para a entidade de abrigo (ShelterEntity). Este método tenta mapear um objeto ShelterContract para um objeto ShelterEntity através do uso de uma função de mapeamento predefinida.
      Parameters:
      shelterContract - o contrato de abrigo a ser convertido para uma entidade de abrigo. Não deve ser null.
      Returns:
      A entidade de abrigo (ShelterEntity) obtida depois de mapear o objeto ShelterContract fornecido.
      Throws:
      ShelterEntityFailuresException - se ocorrer um erro durante o mapeamento do contrato de abrigo para a entidade de abrigo. Isso pode ocorrer se a estrutura dos dados no objeto ShelterContract fornecido não for compatível com a estrutura do objeto ShelterEntity.
      See Also:
    • getShelterEntityMapper

      private static ShelterEntityMapper getShelterEntityMapper()
      Retorna uma nova instância de ShelterEntityMapper.

      Este método é responsável por criar e retornar uma nova instância do objeto ShelterEntityMapper. Essa classe pode ser usada para converter objetos de entidade ShelterEntity em outros tipos de objetos.

      Returns:
      ShelterEntityMapper - Uma nova instância de ShelterEntityMapper
      See Also:
    • constructShelterCreatedResponse

      private static ShelterCreatedResponse constructShelterCreatedResponse(ShelterEntity shelterEntity)
      Este método privado é responsável por construir uma resposta para a criação de um abrigo. Essa resposta é modelada pela classe ShelterCreatedResponse.

      O método aceita como parâmetro um objeto ShelterEntity, que representa um abrigo que foi armazenado no banco de dados. Este objeto é usado para extrair informações pertinentes que serão incluídas na resposta.

      O método segue essas principais etapas:

      1. Inicia a construção de um objeto ShelterCreatedResponse através do método builder().
      2. Configura o ID da resposta para corresponder ao ID da ShelterEntity fornecida.
      3. Configura o nome do abrigo na resposta para corresponder ao nome do abrigo na ShelterEntity fornecida.
      4. Configura o endereço na resposta para corresponder ao endereço da ShelterEntity fornecida, convertendo a AddressEntity para AddressDTO com o auxílio do método mapTo() da classe BuilderMapper.
      5. Configura o usuário responsável na resposta para corresponder ao usuário responsável na ShelterEntity fornecida, convertendo a UserEntity para UserEntityDTO com o auxílio do método mapTo() da classe BuilderMapper.
      6. Finaliza a construção do objeto ShelterCreatedResponse e o retorna.
      Parameters:
      shelterEntity - um objeto ShelterEntity que representa um abrigo armazenado no banco de dados.
      Returns:
      retorna um objeto ShelterCreatedResponse que contém as informações do abrigo recém-criado.
    • createAndReturnShelterInstance

      private ShelterContract createAndReturnShelterInstance(ShelterCreationRequest request) throws ShelterEntityFailuresException
      Cria uma nova instância de Shelter e a retorna.

      Este método é responsável por criar uma nova instância de Shelter com base nas informações fornecidas no objeto ShelterCreationRequest. A nova instância de abrigo é criada usando o método create do ShelterFactory.

      Antes de criar o abrigo, o método realiza as seguintes ações:

      Parameters:
      request - um objeto ShelterCreationRequest contendo as informações para a criação do abrigo.
      Returns:
      newShelter a nova instância de Shelter criada.
      Throws:
      ShelterEntityFailuresException - se ocorrer algum erro durante a criação da entidade Shelter. Isto pode ser devido a um erro ao encontrar o usuário responsável, um erro ao salvar o endereço, ou um erro na própria criação do Shelter.
    • validateResponsibleUSer

      private UserContract validateResponsibleUSer(String responsibleUserEmail) throws ShelterEntityFailuresException
      Valida um usuário responsável por meio do seu e-mail. Esse método busca um UserContract com base no e-mail fornecido, verifica se seu perfil de usuário é DONOR e também verifica se este usuário já é responsável por algum abrigo.
      Parameters:
      responsibleUserEmail - um String que representa o e-mail do usuário responsável. Este parâmetro é usado para localizar o UserContract apropriado.
      Returns:
      UserContract que corresponde ao e-mail fornecido, se todas as validações passarem.
      Throws:
      ShelterEntityFailuresException - se o perfil do usuário responsável for DONOR ou se um UserContract com o e-mail especificado já estiver em uso como um responsável por abrigo.
    • throwShelterEntityFailuresExceptionIfNecessary

      private static void throwShelterEntityFailuresExceptionIfNecessary(Boolean needToThrowAnException, Integer errorCode) throws ShelterEntityFailuresException
      Este método verifica uma condição e lança uma exceção personalizada com uma mensagem de erro passada quando a condição é atendida (ou seja, quando o parâmetro needToThrowAnException for verdadeiro).
      Parameters:
      needToThrowAnException - a condição Booleana segundo a qual a exceção deve ser lançada. Se for verdadeiro, a ShelterEntityFailuresException será lançada.
      errorCode - o Integer que representa a mensagem detalhada da exceção. Esta mensagem é utilizada quando a exceção é lançada.
      Throws:
      ShelterEntityFailuresException - a exceção customizada que será lançada quando needToThrowAnException for verdadeiro.
    • findUserByResponsibleEmail

      private UserContract findUserByResponsibleEmail(String responsibleUserEmail) throws ShelterEntityFailuresException
      Este é um método privado na classe ShelterEntityServiceImpl que é responsável por procurar um usuário por meio do seu e-mail.

      O método é designado para encontrar um UserContract com base no e-mail do usuário responsável fornecido como um parâmetro string.

      O método se encarrega de chamar a função searchUserByEmail da entidade de serviço do usuário. Se for encontrada alguma exceção UserEntityFailuresException durante a execução da função searchUserByEmail, este método irá pegá-la e lançar uma nova exceção do tipo ShelterEntityFailuresException com uma mensagem USER_NOT_FOUND, acompanhada da exceção original.

      Parameters:
      responsibleUserEmail - é uma string que representa o e-mail do usuário responsável pelo abrigo que estamos procurando. Este parâmetro é utilizado para executar a pesquisa do usuário na entidade de serviço do usuário.
      Returns:
      retorna um objeto UserContract que representa o usuário encontrato. Este objeto contém todos os detalhes do usuário que foi buscado por meio de seu e-mail.
      Throws:
      ShelterEntityFailuresException - é uma exceção que é lançada se houver algum problema ao procurar o usuário na entidade de serviço do usuário. Esta exceção é acompanhada com a mensagem USER_NOT_FOUND que descreve o motivo do lançamento da exceção.
    • receiveDonation

      public ShelterInformationResponse receiveDonation(ReceiveDonationRequest request)
      Description copied from interface: ShelterEntityService
      Método para lidar com o recebimento de doações para um abrigo.

      Este método aceita um objeto ReceiveDonationRequest, que contém o e-mail do responsável pela doação e uma lista de doações no formato DTO. O método processa estas doações, associa-as ao abrigo correspondente com base no e-mail fornecido e retorna uma resposta detalhando a doação recebida.

      O método busca o abrigo responsável pela doação usando o e-mail fornecido. Se o abrigo não for encontrado, o método retornará null para indicar que a doação não foi recebida.

      Depois de encontrar o abrigo, o método procede à conversão dos DonationDTO em DonationEntity que são então adicionados à lista de doações do abrigo. Finalmente, o abrigo atualizado é salvo no repositório.

      O método retorna um ShelterInformationResponse que contém informações detalhadas sobre as doações recebidas, incluindo o nome do abrigo, o nome e e-mail do responsável e a lista de doações recebidas.

      Specified by:
      receiveDonation in interface ShelterEntityService
      Parameters:
      request - um objeto ReceiveDonationRequest que contém as informações da doação.
      Returns:
      um objeto ShelterInformationResponse que contém informações das doações recebidas, ou null se o abrigo correspondente ao e-mail fornecido não for encontrado.
    • findShelterByUserResponsibleEmail

      public ShelterInformationResponse findShelterByUserResponsibleEmail(String userResponsibleEmail)
      Description copied from interface: ShelterEntityService
      Método para encontrar um abrigo pelo email do responsável.

      Este método aceita um objeto String, que contém o e-mail do responsável pelo abrigo, com base no e-mail fornecido, e retorna uma resposta detalhando as informações deste abrigo.

      O método retorna um ShelterInformationResponse que contém informações detalhadas sobre o abrigo e as doações recebidas, incluindo o nome do abrigo, o nome e e-mail do responsável, e a lista de doações recebidas.

      Specified by:
      findShelterByUserResponsibleEmail in interface ShelterEntityService
      Returns:
      um objeto ShelterInformationResponse que contém informações das doações recebidas.
    • findAll

      public org.springframework.data.domain.Page<ShelterInformationResponse> findAll(org.springframework.data.domain.Pageable pageable)
      Description copied from interface: ShelterEntityService
      Método utilizado para encontrar todos os abrigos com paginação. Recupera uma página de informações de abrigos do sistema com base nas informações de paginação fornecidas. Este método é responsável por retornar uma lista paginada de ShelterInformationResponse, que contém detalhes sobre os abrigos registrados no sistema.
      Specified by:
      findAll in interface ShelterEntityService
      Parameters:
      pageable - um objeto Pageable que define as informações de paginação, como número da página e tamanho da página, para controlar o retorno das informações de abrigos.
      Returns:
      uma página de objetos ShelterInformationResponse contendo as informações dos abrigos.
    • getShelterInformationResponseMapper

      private static ShelterInformationResponseFromShelterEntityMapper getShelterInformationResponseMapper()
      Este método é responsável por criar uma nova instância de um objeto ShelterInformationResponseFromShelterEntityMapper.

      Um objeto ShelterInformationResponseFromShelterEntityMapper é utilizado para mapear os dados de um objeto ShelterEntity para um objeto ShelterInformationResponse. Isso é tipicamente usado quando se deseja converter os dados de uma entidade de banco de dados em um objeto que pode ser enviado como uma resposta a uma solicitação da API.

      Returns:
      Uma nova instância de um objeto ShelterInformationResponseFromShelterEntityMapper. Não há parâmetros de entrada para este método. Este método não lança explicitamente exceções, mas dado que uma nova instância de ShelterInformationResponseFromShelterEntityMapper está sendo criada, qualquer exceção que possa ser lançada durante a inicialização dessa classe seria propagada para este método.
    • appendDonationsToShelter

      private ShelterEntity appendDonationsToShelter(ReceiveDonationRequest request, ShelterContract currentShelter)
      Este método é responsável por adicionar uma lista de doações à uma determinada instituição.

      Primeiro, verifica se a lista de doações fornecidas na solicitação não está vazia ou é nula. Se a lista for nula ou vazia, uma exceção do tipo ShelterEntityFailuresException será lançada.

      Em seguida, cada doação na lista de doações fornecida é convertida e salva usando o método convertAndSaveDonationDTO do serviço donationEntityService.

      Parameters:
      request - a solicitação de receber doação que contém a lista de doações a serem anexadas. Não deve ser nula e deve conter pelo menos uma doação.
      currentShelter - a entidade de instituição cujas doações serão anexadas. Não deve ser nula.
      Throws:
      ShelterEntityFailuresException - se a lista de doações na requisição for nula ou vazia.
    • donationMapperInstance

      private static DonationMapper donationMapperInstance()
      Este é um método privado estático que instancia e retorna uma nova instância de DonationMapper.
      Returns:
      Retorna uma nova instância do objeto DonationMapper.
    • getCurrentShelterByResponsibleEmail

      private ShelterEntity getCurrentShelterByResponsibleEmail(String responsibleUserEmail)
      Este método é usado para recuperar a entidade Shelter atual, localizada no repositório de entities Shelters, associada ao e-mail do responsável passado como parâmetro.
      Parameters:
      responsibleUserEmail - Um String que representa o e-mail do responsável pelo Shelter. Este e-mail é usado como critério de pesquisa na base de dados.
      Returns:
      ShelterEntity que representa o objeto Shelter atual no repositório associado ao e-mail do responsável passado. Se não houver um objeto Shelter associado ao e-mail fornecido, o método lançará uma ShelterEntityFailuresException.
      Throws:
      ShelterEntityFailuresException - Se o e-mail do responsável fornecido não estiver associado a nenhuma entidade Shelter no repositório.