Class ShelterEntityServiceImpl
- All Implemented Interfaces:
ShelterEntityService
- Since:
- 1.0.0
- Author:
- diegoneves
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AddressEntityServicestatic final Integerstatic final Integerprivate final DonationEntityServicestatic final Integerprivate final ShelterRepositorystatic final Integerstatic final Integerstatic final Integerstatic final Integerstatic final Stringstatic final Integerstatic final Stringstatic final Stringstatic final Stringprivate final ShelterServiceContractstatic final Stringstatic final Integerprivate final UserEntityService -
Constructor Summary
ConstructorsConstructorDescriptionShelterEntityServiceImpl(ShelterRepository repository, AddressEntityService addressService, UserEntityService userEntityService, DonationEntityService donationEntityService) -
Method Summary
Modifier and TypeMethodDescriptionprivate ShelterEntityappendDonationsToShelter(ReceiveDonationRequest request, ShelterContract currentShelter) Este método é responsável por adicionar uma lista de doações à uma determinada instituição.private static ShelterCreatedResponseconstructShelterCreatedResponse(ShelterEntity shelterEntity) Este método privado é responsável por construir uma resposta para a criação de um abrigo.private static ShelterEntityconvertShelterContractToEntity(ShelterContract shelterContract) Converte um contrato de abrigo (ShelterContract) para a entidade de abrigo (ShelterEntity).private ShelterContractCria uma nova instância deSheltere a retorna.createShelter(ShelterCreationRequest request) Este método é responsável por criar um novo abrigo no sistema.private static DonationMapperEste é um método privado estático que instancia e retorna uma nova instância deDonationMapper.org.springframework.data.domain.Page<ShelterInformationResponse>findAll(org.springframework.data.domain.Pageable pageable) Método utilizado para encontrar todos os abrigos com paginação.findShelterByUserResponsibleEmail(String userResponsibleEmail) Método para encontrar um abrigo pelo email do responsável.private UserContractfindUserByResponsibleEmail(String responsibleUserEmail) Este é um método privado na classeShelterEntityServiceImplque é responsável por procurar um usuário por meio do seu e-mail.private ShelterEntitygetCurrentShelterByResponsibleEmail(String responsibleUserEmail) private static ShelterEntityMapperRetorna uma nova instância deShelterEntityMapper.private static ShelterInformationResponseFromShelterEntityMapperEste método é responsável por criar uma nova instância de um objetoShelterInformationResponseFromShelterEntityMapper.receiveDonation(ReceiveDonationRequest request) Método para lidar com o recebimento de doações para um abrigo.private static voidthrowShelterEntityFailuresExceptionIfNecessary(Boolean needToThrowAnException, Integer errorCode) 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âmetroneedToThrowAnExceptionfor verdadeiro).private UserContractvalidateResponsibleUSer(String responsibleUserEmail) Valida um usuário responsável por meio do seu e-mail.
-
Field Details
-
SHELTER_CREATION_ERROR_MESSAGE
-
USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR
-
REQUEST_VALIDATION_ERROR_MESSAGE
-
RESPONSIBLE_USER_PROFILE_INVALID
-
RESPONSIBLE_USER_ALREADY_IN_USE
-
DONATION_VALIDATION_ERROR
-
EMPTY_DONATION_LIST
-
RESPONSIBLE_EMAIL_NOT_ASSOCIATED_WITH_SHELTER
-
CLASS_MAPPING_FAILURE
-
SHELTER_CREATION_SUCCESS_LOG
- See Also:
-
SHELTER_CREATION_FAILURE_LOG
- See Also:
-
RESPONSIBLE_USER_VERIFICATION_ERROR_LOG
- See Also:
-
USER_NOT_FOUND_ERROR_LOG
- See Also:
-
SHELTER_DATA_MAPPING_FAILED_LOG
- See Also:
-
repository
-
shelterServiceContract
-
addressService
-
userEntityService
-
donationEntityService
-
-
Constructor Details
-
ShelterEntityServiceImpl
@Autowired public ShelterEntityServiceImpl(ShelterRepository repository, AddressEntityService addressService, UserEntityService userEntityService, DonationEntityService donationEntityService)
-
-
Method Details
-
createShelter
Este método é responsável por criar um novo abrigo no sistema. Ele recebe um objetoShelterCreationRequest, 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:
- Cria uma nova instância de
ShelterContractatravés do métodocreateAndReturnShelterInstance, utilizando as informações do objetoShelterCreationRequestfornecido. - Mapeia o objeto
ShelterContractcriado para um objetoShelterEntitye o salva no repositório do sistema utilizando o métodomapShelterAndSaveToRepository. - Constrói uma resposta para a criação do abrigo utilizando o objeto
ShelterEntitysalvo e o retorna.
- Specified by:
createShelterin interfaceShelterEntityService- Parameters:
request- um objetoShelterCreationRequestcontendo as informações necessárias para criar um novo abrigo.- Returns:
- um objeto
ShelterCreatedResponsecontendo 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.
- Cria uma nova instância de
-
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 objetoShelterContractpara um objetoShelterEntityatravé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 objetoShelterContractfornecido. - 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 objetoShelterContractfornecido não for compatível com a estrutura do objetoShelterEntity.- See Also:
-
getShelterEntityMapper
Retorna uma nova instância deShelterEntityMapper.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
Este método privado é responsável por construir uma resposta para a criação de um abrigo. Essa resposta é modelada pela classeShelterCreatedResponse.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:
- Inicia a construção de um objeto
ShelterCreatedResponseatravés do método builder(). - Configura o ID da resposta para corresponder ao ID da
ShelterEntityfornecida. - Configura o nome do abrigo na resposta para corresponder ao nome do abrigo na
ShelterEntityfornecida. - Configura o endereço na resposta para corresponder ao endereço da
ShelterEntityfornecida, convertendo aAddressEntityparaAddressDTOcom o auxílio do métodomapTo()da classeBuilderMapper. - Configura o usuário responsável na resposta para corresponder ao usuário responsável na
ShelterEntityfornecida, convertendo aUserEntityparaUserEntityDTOcom o auxílio do métodomapTo()da classeBuilderMapper. - Finaliza a construção do objeto
ShelterCreatedResponsee o retorna.
- Parameters:
shelterEntity- um objetoShelterEntityque representa um abrigo armazenado no banco de dados.- Returns:
- retorna um objeto
ShelterCreatedResponseque contém as informações do abrigo recém-criado.
- Inicia a construção de um objeto
-
createAndReturnShelterInstance
private ShelterContract createAndReturnShelterInstance(ShelterCreationRequest request) throws ShelterEntityFailuresException Cria uma nova instância deSheltere a retorna.Este método é responsável por criar uma nova instância de
Sheltercom base nas informações fornecidas no objetoShelterCreationRequest. A nova instância de abrigo é criada usando o métodocreatedoShelterFactory.Antes de criar o abrigo, o método realiza as seguintes ações:
- Encontra o
UserContractresponsável pelo abrigo através do e-mail fornecido noShelterCreationRequest, usando o métodofindUserByResponsibleEmail. - Cria e salva um
Addresscom base nas informações de endereço fornecidas noShelterCreationRequest, usando o métodocreateAndSaveAddressFromDto.
- Parameters:
request- um objetoShelterCreationRequestcontendo as informações para a criação do abrigo.- Returns:
- newShelter a nova instância de
Sheltercriada. - 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.
- Encontra o
-
validateResponsibleUSer
private UserContract validateResponsibleUSer(String responsibleUserEmail) throws ShelterEntityFailuresException Valida um usuário responsável por meio do seu e-mail. Esse método busca umUserContractcom base no e-mail fornecido, verifica se seu perfil de usuário éDONORe também verifica se este usuário já é responsável por algum abrigo.- Parameters:
responsibleUserEmail- umStringque representa o e-mail do usuário responsável. Este parâmetro é usado para localizar oUserContractapropriado.- Returns:
UserContractque corresponde ao e-mail fornecido, se todas as validações passarem.- Throws:
ShelterEntityFailuresException- se o perfil do usuário responsável forDONORou se umUserContractcom 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âmetroneedToThrowAnExceptionfor verdadeiro).- Parameters:
needToThrowAnException- a condição Booleana segundo a qual a exceção deve ser lançada. Se for verdadeiro, aShelterEntityFailuresExceptionserá 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 quandoneedToThrowAnExceptionfor verdadeiro.
-
findUserByResponsibleEmail
private UserContract findUserByResponsibleEmail(String responsibleUserEmail) throws ShelterEntityFailuresException Este é um método privado na classeShelterEntityServiceImplque é responsável por procurar um usuário por meio do seu e-mail.O método é designado para encontrar um
UserContractcom 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
searchUserByEmailda entidade de serviço do usuário. Se for encontrada alguma exceçãoUserEntityFailuresExceptiondurante a execução da funçãosearchUserByEmail, este método irá pegá-la e lançar uma nova exceção do tipoShelterEntityFailuresExceptioncom uma mensagemUSER_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
UserContractque 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 mensagemUSER_NOT_FOUNDque descreve o motivo do lançamento da exceção.
-
receiveDonation
Description copied from interface:ShelterEntityServiceMé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
DonationDTOemDonationEntityque são então adicionados à lista de doações do abrigo. Finalmente, o abrigo atualizado é salvo no repositório.O método retorna um
ShelterInformationResponseque 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:
receiveDonationin interfaceShelterEntityService- Parameters:
request- um objetoReceiveDonationRequestque contém as informações da doação.- Returns:
- um objeto
ShelterInformationResponseque contém informações das doações recebidas, ou null se o abrigo correspondente ao e-mail fornecido não for encontrado.
-
findShelterByUserResponsibleEmail
Description copied from interface:ShelterEntityServiceMé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
ShelterInformationResponseque 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:
findShelterByUserResponsibleEmailin interfaceShelterEntityService- Returns:
- um objeto
ShelterInformationResponseque 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:ShelterEntityServiceMé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 deShelterInformationResponse, que contém detalhes sobre os abrigos registrados no sistema.- Specified by:
findAllin interfaceShelterEntityService- Parameters:
pageable- um objetoPageableque 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
ShelterInformationResponsecontendo as informações dos abrigos.
-
getShelterInformationResponseMapper
private static ShelterInformationResponseFromShelterEntityMapper getShelterInformationResponseMapper()Este método é responsável por criar uma nova instância de um objetoShelterInformationResponseFromShelterEntityMapper.Um objeto
ShelterInformationResponseFromShelterEntityMapperé utilizado para mapear os dados de um objetoShelterEntitypara um objetoShelterInformationResponse. 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 deShelterInformationResponseFromShelterEntityMapperestá 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
ShelterEntityFailuresExceptionserá lançada.Em seguida, cada doação na lista de doações fornecida é convertida e salva usando o método
convertAndSaveDonationDTOdo serviçodonationEntityService.- 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
Este é um método privado estático que instancia e retorna uma nova instância deDonationMapper.- Returns:
- Retorna uma nova instância do objeto
DonationMapper.
-
getCurrentShelterByResponsibleEmail
Este método é usado para recuperar a entidadeShelteratual, localizada no repositório de entitiesShelters, associada ao e-mail do responsável passado como parâmetro.- Parameters:
responsibleUserEmail- UmStringque representa o e-mail do responsável peloShelter. Este e-mail é usado como critério de pesquisa na base de dados.- Returns:
ShelterEntityque representa o objeto Shelter atual no repositório associado ao e-mail do responsável passado. Se não houver um objetoShelterassociado ao e-mail fornecido, o método lançará umaShelterEntityFailuresException.- Throws:
ShelterEntityFailuresException- Se o e-mail do responsável fornecido não estiver associado a nenhuma entidadeShelterno repositório.
-