@Transactional(readOnly = true)
  private void validateAsUpdate(Usuario usuario, boolean ignorePessoa) {
    if (ignorePessoa) {
      validateIgnoringIdAndPessoa(usuario);
    } else {
      validateIgnoringId(usuario);
    }

    if (usuario.getUsuarioId() == null) {
      throw new HttpException(
          EXCEPTION_USUARIO_USUARIO_ID_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (findOne(usuario.getUsuarioId()) == null) {
      throw new HttpException(EXCEPTION_USUARIO_NOT_FOUND, HttpStatus.NOT_ACCEPTABLE);
    }

    Usuario foundUsuarioByApelido = findByApelido(usuario.getApelido());

    if (foundUsuarioByApelido != null) {
      if (!foundUsuarioByApelido.getUsuarioId().equals(usuario.getUsuarioId())) {
        throw new HttpException(
            EXCEPTION_USUARIO_APELIDO_IS_ALREADY_IN_USE, HttpStatus.NOT_ACCEPTABLE);
      }
    }
  }
  @Transactional(readOnly = true)
  public void validateIgnoringIdAndPessoa(Usuario usuario) {
    if (usuario == null) {
      throw new HttpException(EXCEPTION_USUARIO_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (usuario.getStatus() == null) {
      throw new HttpException(EXCEPTION_USUARIO_STATUS_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (StringHelper.isBlank(usuario.getApelido())) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_NOT_BE_EMPTY, HttpStatus.NOT_ACCEPTABLE);
    }

    if (usuario.getApelido().length() > 45) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_NOT_BE_BIGGER_THAN_45_CHARACTERS,
          HttpStatus.NOT_ACCEPTABLE);
    }

    if (!usuario.getApelido().matches(Constants.TEXT_PATTERN_APELIDO)) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_CONTAINS_ONLY_LETTERS_NUMBERS_UNDERLINES_DASHES_AND_POINTS,
          HttpStatus.NOT_ACCEPTABLE);
    }

    validateSenha(usuario.getSenha());

    if (usuario.getPerfis() != null) {
      for (int i = 0; i < usuario.getPerfis().size(); i++) {
        for (int j = 0; j < usuario.getPerfis().size(); j++) {
          if (j != i) {
            if (usuario.getPerfis().get(i) == usuario.getPerfis().get(j)) {
              throw new HttpException(
                  EXCEPTION_USUARIO_MUST_NOT_CONTAINS_DUPLICATED_PERFIS, HttpStatus.NOT_ACCEPTABLE);
            }
          }
        }
      }
    }
  }
  @Transactional(readOnly = true)
  private void validateAsInsert(Usuario usuario, boolean ignorePessoa) {
    if (ignorePessoa) {
      validateIgnoringIdAndPessoa(usuario);
    } else {
      validateIgnoringId(usuario);
    }

    if (usuario.getUsuarioId() != null) {
      throw new HttpException(EXCEPTION_USUARIO_USUARIO_ID_MUST_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (findByApelido(usuario.getApelido()) != null) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_IS_ALREADY_IN_USE, HttpStatus.NOT_ACCEPTABLE);
    }
  }