br.com.utfpr.porta.servico.UsuarioServico Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tcc-porta-servico Show documentation
Show all versions of tcc-porta-servico Show documentation
Projeto serviço que realiza acesso ao banco de dados para o projeto API e web
The newest version!
package br.com.utfpr.porta.servico;
import java.util.Optional;
import javax.persistence.PersistenceException;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import br.com.utfpr.porta.modelo.Grupo;
import br.com.utfpr.porta.modelo.Parametro;
import br.com.utfpr.porta.modelo.Pessoa;
import br.com.utfpr.porta.modelo.Usuario;
import br.com.utfpr.porta.repositorio.Parametros;
import br.com.utfpr.porta.repositorio.Pessoas;
import br.com.utfpr.porta.repositorio.Usuarios;
import br.com.utfpr.porta.servico.excecao.CampoNaoInformadoExcecao;
import br.com.utfpr.porta.servico.excecao.EmailUsuarioJaCadastradoExcecao;
import br.com.utfpr.porta.servico.excecao.ImpossivelExcluirEntidadeException;
import br.com.utfpr.porta.servico.excecao.RfidUsuarioJaCadastradoExcecao;
import br.com.utfpr.porta.servico.excecao.ValidacaoBancoDadosExcecao;
import br.com.utfpr.porta.storage.AudioStorage;
@Service
public class UsuarioServico {
private static final String PADRAO_SENHA_SITE = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@#$%!^&*]).{6,12}$";
private static final String PADRAO_SENHA_TECLADO = "^\\d{4}$";
@Autowired
private Usuarios usuariosRepositorio;
@Autowired
private Pessoas pessoasRepositorio;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private Parametros parametroRepositorio;
@Autowired
private AudioStorage audioStorage;
private void validar(Usuario usuario) {
if(usuario == null) {
throw new NullPointerException("Entidade usuário está nulo");
}
if(usuario.getPessoa() == null) {
throw new NullPointerException("Dados pessoais não informado");
}
if(usuario.getGrupos() == null) {
throw new NullPointerException("Grupo do usuário não informado");
}
if(usuario.isNovo() && Strings.isEmpty(usuario.getSenhaSite())) {
throw new CampoNaoInformadoExcecao("senhaSite", "Senha do site é obrigatória para novo usuário");
}
if(Strings.isEmpty(usuario.getEmail())) {
throw new CampoNaoInformadoExcecao("email", "E-mail é obrigatório o preenchimento");
}
Optional usuarioExistente = usuariosRepositorio.findByEmail(usuario.getEmail());
if (usuarioExistente.isPresent() && !usuarioExistente.get().equals(usuario)) {
throw new EmailUsuarioJaCadastradoExcecao("E-mail já cadastrado");
}
}
private void validarNovaSenhaSite(Usuario usuario) {
if(Strings.isEmpty(usuario.getSenhaSite())) {
throw new NullPointerException("Senha do site não informada");
}
if(!usuario.getSenhaSite().matches(PADRAO_SENHA_SITE)) {
throw new CampoNaoInformadoExcecao("senhaSite", "A senha do site deve conter uma letra maiúscula, um caracter especial(@,#,$,%,!,^,&,*) e um número. Deve conter de 6 a 12 caracteres");
}
usuario.setSenhaSite(this.passwordEncoder.encode(usuario.getSenhaSite()));
usuario.setConfirmacaoSenhaSite(usuario.getSenhaSite());
}
private void validarNovaSenhaTeclado(Usuario usuario) {
if(Strings.isEmpty(usuario.getSenhaTeclado())) {
throw new NullPointerException("Senha do teclado não informada");
}
if(!usuario.getSenhaTeclado().matches(PADRAO_SENHA_TECLADO)) {
throw new CampoNaoInformadoExcecao("senhaTeclado", "Senha da porta deve ter 4 dígitos");
}
usuario.setSenhaTeclado(this.passwordEncoder.encode(usuario.getSenhaTeclado()));
usuario.setConfirmacaoSenhaTeclado(usuario.getSenhaTeclado());
}
private void validarGrupoUsuario(Usuario usuario) {
if(Strings.isEmpty(usuario.getRfid())) {
throw new CampoNaoInformadoExcecao("rfid", "Código do cartão RFID é obrigatório");
}
Optional usuarioExistenteRFID = usuariosRepositorio.findByRfidAndEmailNot(usuario.getRfid(), usuario.getEmail());
if (usuarioExistenteRFID.isPresent() && usuarioExistenteRFID.get().getRfid().compareTo(usuario.getRfid()) == 0) {
throw new RfidUsuarioJaCadastradoExcecao("RFID já cadastrado");
}
if(usuario.isNovo() || usuario.isSenhaTecladoAlterado()) {
validarNovaSenhaTeclado(usuario);
}
}
private void verificarSenhasUsuario(Usuario usuario) {
if(!usuario.isNovo()) {
Usuario usuarioBase = usuariosRepositorio.findOne(usuario.getCodigo());
if(usuarioBase == null) {
throw new ValidacaoBancoDadosExcecao("Não foi possível encontrar na base de dados o usuário alterado");
}
if(Strings.isEmpty(usuario.getSenhaSite())) {
usuario.setSenhaSite(usuarioBase.getSenhaSite());
usuario.setConfirmacaoSenhaSite(usuarioBase.getSenhaSite());
}
else {
validarNovaSenhaSite(usuario);
}
usuario.setSenhaTecladoAlterado(Strings.isNotEmpty(usuario.getSenhaTeclado()));
if(Strings.isEmpty(usuario.getSenhaTeclado()) && Strings.isNotEmpty(usuarioBase.getSenhaTeclado())) {
usuario.setSenhaTeclado(usuarioBase.getSenhaTeclado());
usuario.setConfirmacaoSenhaTeclado(usuarioBase.getSenhaTeclado());
}
}
else {
validarNovaSenhaSite(usuario);
}
}
@Transactional
public Usuario salvar(Usuario usuario) {
validar(usuario);
verificarSenhasUsuario(usuario);
Parametro parCodGrpUsuario = parametroRepositorio.findOne("COD_GRP_USUARIO");
if(parCodGrpUsuario == null) {
throw new NullPointerException("COD_GRP_USUARIO não parametrizado");
}
for(Grupo grupo : usuario.getGrupos()) {
if(grupo.getCodigo().compareTo(parCodGrpUsuario.getValorLong()) == 0) {
validarGrupoUsuario(usuario);
}
}
Pessoa pessoaSalva = pessoasRepositorio.save(usuario.getPessoa());
if(pessoaSalva == null || pessoaSalva.getCodigo() == null) {
throw new ValidacaoBancoDadosExcecao("Não foi possível salvar os dados pessoais do usuário");
}
if(usuario.isNovo()) {
usuario.setPessoa(pessoaSalva);
usuario.setAtivo(Boolean.TRUE);
}
return usuariosRepositorio.save(usuario);
}
@Transactional
public void excluir(Long codigo) {
if(codigo == null) {
throw new NullPointerException("Código do usuário não informado");
}
Usuario usuario = usuariosRepositorio.findOne(codigo);
if(usuario == null) {
throw new ImpossivelExcluirEntidadeException("Usuário não encontrado na base de dados");
}
try {
usuariosRepositorio.delete(usuario);
usuariosRepositorio.flush();
}
catch(PersistenceException e) {
throw new ImpossivelExcluirEntidadeException("Impossível apagar usuário. Ele possui autorizações relacionadas.");
}
if(Strings.isNotEmpty(usuario.getNomeAudio())) {
audioStorage.excluir(usuario.getNomeAudio());
}
}
@Transactional
public void alterarSenhaSite(Usuario usuario, String novaSenha) {
if(usuario == null || usuario.getCodigo() == null) {
throw new NullPointerException("Usuário não informado");
}
usuario.setSenhaSite(novaSenha);
validarNovaSenhaSite(usuario);
if(Strings.isNotEmpty(usuario.getSenhaTeclado())) {
usuario.setConfirmacaoSenhaTeclado(usuario.getSenhaTeclado());
}
try {
usuariosRepositorio.save(usuario);
}
catch(PersistenceException e) {
throw new ValidacaoBancoDadosExcecao("Erro ao alterar senha do usuário");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy