java.lang.Object
diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
All Implemented Interfaces:
UserEntityService

@Service public class UserEntityServiceImpl extends Object implements UserEntityService
A classe UserEntityServiceImpl implementa a interface UserEntityService e lida com a lógica de negócios das operações de usuário. A classe é marcada como um componente do Spring com a anotação Service, o que permite ao Spring detectar e gerenciar as instâncias dessa classe.

Além disso, a classe lida com cenários de erros e exceções, lançando uma exceção personalizada chamada UserEntityFailuresException quando um problema ocorre.

Since:
1.0.0
Author:
diegoneves
See Also:
  • Field Details

    • INVALID_EMAIL_ERROR_MESSAGE

      public static final Integer INVALID_EMAIL_ERROR_MESSAGE
    • EMAIL_NOT_FOUND_ERROR_MESSAGE

      public static final Integer EMAIL_NOT_FOUND_ERROR_MESSAGE
    • EMAIL_ALREADY_IN_USE

      public static final Integer EMAIL_ALREADY_IN_USE
    • USER_CREATION_FAILURE_MESSAGE

      public static final Integer USER_CREATION_FAILURE_MESSAGE
    • USER_PROFILE_VALIDATION_FAILURE

      public static final Integer USER_PROFILE_VALIDATION_FAILURE
    • MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE

      public static final Integer MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE
    • USER_CREATION_ERROR_LOG

      public static final String USER_CREATION_ERROR_LOG
      See Also:
    • EMAIL_DUPLICATE_LOG

      public static final String EMAIL_DUPLICATE_LOG
      See Also:
    • USER_CREATION_SUCCESS_LOG

      public static final String USER_CREATION_SUCCESS_LOG
      See Also:
    • userRepository

      private final UserRepository userRepository
    • userServiceContract

      private final UserServiceContract userServiceContract
    • donorDepositService

      private final DonorDepositService donorDepositService
  • Constructor Details

  • Method Details

    • searchUserByEmail

      public UserContract searchUserByEmail(String email) throws UserEntityFailuresException
      Description copied from interface: UserEntityService
      Este método é usado para obter uma entidade de usuário pelo seu email. Primeiramente, o método verifica se o valor do parâmetro de email não é nulo ou vazio. Se o valor do email for nulo ou vazio, uma exceção UserEntityFailuresException é lançada ao usuário com uma mensagem de erro relevante.

      Se o email for válido, o método tentará encontrar uma entidade de usuário que corresponda ao email usando a interface UserRepository. Se não for encontrada uma entidade de usuário para o email fornecido, o método lançará uma exceção UserEntityFailuresException com uma mensagem de erro apropriada.

      Specified by:
      searchUserByEmail in interface UserEntityService
      Parameters:
      email - A string que representa o email do usuário que será procurado no repositório.
      Returns:
      A entidade do usuário correspondente ao email fornecido.
      Throws:
      UserEntityFailuresException - Se nenhuma entidade de usuário puder ser encontrada para o email fornecido ou o valor do email for nulo ou vazio.
    • createUserEntity

      Description copied from interface: UserEntityService
      Método para criar uma nova entidade do usuário. Primeiramente, verifica se a solicitação enviada está completa e se os valores de seus atributos estão de acordo com a regra de negócio da aplicação. Caso contrário, uma exceção UserEntityFailuresException é disparada com uma mensagem de erro detalhada.

      Se os dados fornecidos estiverem corretos, o método criará um novo registro de usuário no banco de dados usando a interface UserRepository. Ao final, um objeto UserEntityCreatedResponse é retornado contendo todos os dados do novo usuário criado.

      Specified by:
      createUserEntity in interface UserEntityService
      Parameters:
      request - O objeto UserEntityCreationRequest que contém os dados necessários para a criação do novo usuário.
      Returns:
      Um objeto UserEntityCreatedResponse contendo os dados do novo usuário criado.
      Throws:
      UserEntityFailuresException - Se os dados fornecidos na solicitação estão incompletos ou inconsistentes ou se ocorrer algum problema durante a criação do novo usuário no banco de dados.
    • findUserByEmail

      public UserEntityCreatedResponse findUserByEmail(String email)
      Description copied from interface: UserEntityService
      Este método é usado para obter uma response de usuário pelo seu email.

      Se o email for válido, o método tentará encontrar uma entidade de usuário que corresponda ao email usando a interface UserRepository. Se não for encontrada uma entidade de usuário para o email fornecido, o método lançará uma exceção UserEntityFailuresException com uma mensagem de erro apropriada.

      Specified by:
      findUserByEmail in interface UserEntityService
      Parameters:
      email - A string que representa o email do usuário que será procurado no repositório.
      Returns:
      Um objeto UserEntityCreatedResponse de um usuário correspondente ao email fornecido.
    • getUserEntityMapper

      private static UserEntityMapper getUserEntityMapper()
      Retorna uma nova instância de UserEntityMapper.

      Este método cria e retorna uma nova instância de UserEntityMapper. É usado para transformar User em UserEntity e vice-versa. A classe UserEntityMapper é um mapper (conversor) usado no contexto de persistência de dados da aplicação, convertendo objetos de domínio em entidades de banco de dados e vice versa em operações de CRUD.

      Returns:
      uma nova instância de UserEntityMapper
      See Also:
    • createUserEntityFromCreationRequest

      private UserEntity createUserEntityFromCreationRequest(UserEntityCreationRequest request)
      Método auxiliar usado para converter uma instância de UserEntityCreationRequest para uma instância de UserEntity.

      Este método recebe uma solicitação de criação de entidade de usuário, gera um contrato de usuário correspondente através de createUserFromRequest(UserEntityCreationRequest) e usa um UserEntityMapper para mapear o contrato de usuário para uma entidade de usuário.

      Parameters:
      request - Uma instância de UserEntityCreationRequest representando a solicitação de criação de uma nova entidade de usuário.
      Returns:
      userEntity Uma instância de UserEntity representando a entidade de usuário recém-criada.
      Throws:
      UserEntityFailuresException - Se ocorrer um erro durante a criação do usuário ou mapeamento de contrato de usuário para entidade de usuário. A exceção encapsula e fornece mais detalhes sobre a natureza específica do erro.
      See Also:
    • createUserFromRequest

      private UserContract createUserFromRequest(UserEntityCreationRequest request)
      Método auxiliar para criar um User a partir de uma solicitação de criação de entidade de usuário UserEntityCreationRequest.

      Este método é utilizado principalmente para transformar a solicitação de criação de entidade de usuário em uma instância concreta de User. Ele lida com a validação da solicitação e a criação do usuário, lançando uma exceção UserEntityFailuresException caso algum problema ocorra. A exceção lança detalhes específicos sobre a natureza do erro. O perfil do usuário é validado e convertido para um tipo de enumeração UserProfile apropriado.

      Exceções

      O método lança a exceção UserEntityFailuresException nas seguintes situações:

      Nesses casos, uma UserEntityFailuresException será lançada com uma mensagem de erro adequada.

      Parameters:
      request - uma solicitação de criação de entidade de usuário formada por userName, email, userProfile e userPassword.
      Returns:
      User uma instância de User representando o novo usuário criado.
      Throws:
      UserEntityFailuresException - lançada quando a validação do userProfile falha ou é impossível criar o usuário devido a uma RuntimeException.
      See Also:
    • checkIfEmailAlreadyInUse

      private void checkIfEmailAlreadyInUse(String email)
      Este método recebe como parâmetro um endereço de email no formato String e verifica se este email já está registrado no repositório de usuários. A verificação de registro é feita a partir do método UserRepository.findByEmail(String), que retorna um Optional de UserEntity.

      Primeiro, o método utiliza a função ValidationUtils.validateNotNullOrEmpty(Object, String, Class) para assegurar que o email fornecido não é nulo ou vazio.

      Se a verificação retorna um UserEntity, isso significa que o endereço de email já existe na base de dados do sistema, neste caso, uma exceção UserEntityFailuresException é lançada com uma mensagem predefinida EMAIL_ALREADY_IN_USE.

      Já se a instância de UserEntity for vazia, ou seja, se o email não foi registrado anteriormente no sistema, a operação prossegue normalmente sem lançar nenhuma exceção.

      Parameters:
      email - o endereço de email a ser verificado.
      Throws:
      UserEntityFailuresException - Caso o email fornecido seja nulo ou vazio, ou, caso o email já esteja em uso por um usuário existente.