Subversion Repositories Integrator Subversion

Rev

Rev 195 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.service.usuario.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.model.UsuarioPerfil;
import br.com.ec.domain.service.parametro.ParametroService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.domain.shared.CriptografiaMD5;
import br.com.ec.infrastructure.repository.UsuarioRepository;

@Service
public class UsuarioServiceImpl extends AbstractService<Usuario> implements UsuarioService {

        private static final String USUARIO_INFORMADO_NAO_EXISTE = "Usuário informado não existe";
        private final UsuarioRepository usuarioRepository;
        private ParametroService parametroService;

        @Autowired
        public UsuarioServiceImpl(ParametroService parametroService, UsuarioRepository usuarioRepository, Validador validador) {
                super(validador);
                this.parametroService = parametroService;
                this.usuarioRepository = usuarioRepository;
        }

        @Override
        protected GenericRepository<Usuario> getRepository() {
                return this.usuarioRepository;
        }
       
        @Override
        protected void regrasNegocioCadastrar(Usuario usuario) {
                usuario.setSenha(CriptografiaMD5.criptografaSenha(usuario.getSenha()));
                usuario.setAtivo(true);
        }
       
        @Override
        public Usuario efetuarLogin(Usuario usuario) {
                if (VerificadorUtil.naoEstaNuloOuVazio(usuario.getSenha())) {
                        if (usuario.getSenha().length() < 6) {
                                throw new RuntimeException("Senha inválida");
                        }
                } else {
                        throw new RuntimeException("Senha inválida");
                }
                try {
                        criptografarSenhaUsuarioEmMD5(usuario);
                        Usuario usuarioConsultado = usuarioRepository.consultarPorLogin(usuario);
                        if (VerificadorUtil.naoEstaNulo(usuarioConsultado)) {
                                usuarioRepository.atualizarDataUltimoAcesso(usuarioConsultado);
                        }
                        usuarioConsultado.setParametros(parametroService.listarParametrosAtivos());
                        return usuarioConsultado;
                } catch (Exception e) {
                        throw new RuntimeException(USUARIO_INFORMADO_NAO_EXISTE);
                }
        }

        private void criptografarSenhaUsuarioEmMD5(Usuario usuario) {
                usuario.setSenha(CriptografiaMD5.criptografaSenha(usuario.getSenha()));
        }
       
        @Override
        public Usuario consultarUsuarioPorSenha(String senha) {
                try {
                        senha = CriptografiaMD5.criptografaSenha(senha);
                        return usuarioRepository.consultarUsuarioPorSenha(senha);
                } catch (Exception e) {
                        throw new RuntimeException(USUARIO_INFORMADO_NAO_EXISTE);
                }
        }
       
        @Override
        public Usuario consultarUsuarioPorPessoa(Pessoa pessoa) {
                return usuarioRepository.consultarUsuarioPorPessoa(pessoa);
        }
       
        @Override
        public Usuario detalhar(Usuario usuario) {
                return usuarioRepository.detalhar(usuario);
        }
       
        @Override
        public void alterarSenhaUsuario(Usuario usuario) {
                if (VerificadorUtil.estaNuloOuVazio(usuario.getSenha())) {
                        throw new NegocioException("Senha inválida");
                }
                if (usuario.getSenha().length() < 6) {
                        throw new NegocioException("A senha deve ter 6 dígitos, no mínimo");
                }
                usuario.setSenha(CriptografiaMD5.criptografaSenha(usuario.getSenha()));
                if (senhaJaExiste(usuario.getSenha())) {
                        throw new NegocioException("Senha inválida, tente outra");
                }
                usuarioRepository.alterarSenha(usuario);
        }
       
        @Override
        public Boolean senhaJaExiste(String senha) {
                return usuarioRepository.obterQuantidadeUsuarioComSenha(senha) > 0 ? true : false;
        }
       
        @Override
        public void naoPermitirPerfilLoja(Usuario usuario) {
                for (UsuarioPerfil usuarioPerfil : usuario.getPerfis()) {
                        if (usuarioPerfil.getPerfil().getCodigo().equals(ConstantesSEC.PERFIL_LOJA_9)) {
                                throw new NegocioException("Perfil inválido para a operação! Favor informar outro usuário com permissão");
                        }
                }
        }
       
}