Subversion Repositories Integrator Subversion

Rev

Rev 229 | Rev 259 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.service.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.dto.UsuarioDTO;
import br.com.ec.domain.modal.Usuario;
import br.com.ec.domain.service.LojaService;
import br.com.ec.domain.service.PerfilService;
import br.com.ec.domain.service.UsuarioService;
import br.com.ec.repository.UsuarioRepository;
import br.com.ec.shared.CriptografiaMD5;
import br.com.ec.shared.EmailComponente;
import br.com.ec.shared.SharedComponente;

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

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

        @Autowired
        public UsuarioServiceImpl(PerfilService perfilService, LojaService lojaService, UsuarioRepository usuarioRepository, Validador validador) {
                super(validador);
                this.perfilService = perfilService;
                this.lojaService = lojaService;
                this.usuarioRepository = usuarioRepository;
        }

        @Override
        protected GenericRepository<Usuario> getRepository() {
                return this.usuarioRepository;
        }
       
        @Override
        public UsuarioDTO consultarPorLogin(String login, String senha) {
                senha = CriptografiaMD5.criptografaSenha(senha);
                UsuarioDTO usuarioDTO = usuarioRepository.consultarPorLogin(login, senha);
                usuarioDTO.setPerfis(usuarioRepository.consultarPerfisDoUsuario(usuarioDTO.getSequencial()));
                if (perfilService.temPerfilAdministrador(usuarioDTO.getPerfis())) {
                        usuarioDTO.setLojas(lojaService.consultarLojasAtivas());
                } else {
                        usuarioDTO.setLojas(usuarioRepository.consultarLojasDoUsuario(usuarioDTO.getSequencial()));
                }
                return usuarioDTO;
        }
       
        @Override
        public void alterarSenhaUsuario(String login, String senhaAtual, String novaSenha) {
                verificarSenhas(login, senhaAtual, novaSenha);
                usuarioRepository.alterarSenha(login, CriptografiaMD5.criptografaSenha(novaSenha));
        }
       
        private void verificarSenhas(String login, String senhaAtual, String novaSenha) {
                if (VerificadorUtil.estaNuloOuVazio(novaSenha)) {
                        throw new NegocioException("Senha inválida");
                }
                if (novaSenha.length() < 6) {
                        throw new NegocioException("A senha deve ter 6 dígitos, no mínimo");
                }
               
                try {
                        consultarPorLogin(login, senhaAtual);
                } catch (Exception e) {
                        throw new NegocioException("Senha atual incorreta");
                }
               
                verificarSeSenhaJaExisteEmOutroLogin(login, novaSenha);
        }
       
        private void verificarSeSenhaJaExisteEmOutroLogin(String login, String senha) {
                if (usuarioRepository.obterQuantidadeUsuarioDiferenteComSenhaInformada(login, CriptografiaMD5.criptografaSenha(senha)) > 0) {
                        throw new NegocioException("Senha já existente, tente outra");
                }
        }
       
        @Override
        public String resetarSenhaUsuarioRetornandoEmail(String login, String cpf) {
                String emailUsuario = usuarioRepository.consultarEmailPorLogin(login);
                if (VerificadorUtil.estaNuloOuVazio(emailUsuario)) {
                        throw new NegocioException("Usuário não possui email, favor entrar em contato com a administração");
                }
                if (usuarioRepository.obterQuantidadeUsuarioComLoginCpfInformados(login, cpf) < 1) {
                        throw new NegocioException("Dados não conferem, favor entrar em contato com a administração");
                }
                String senhaProvisoria = new SharedComponente().gerarSenha(8);
                usuarioRepository.alterarSenha(login, CriptografiaMD5.criptografaSenha(senhaProvisoria));
                new EmailComponente()
                        .comEmailDestino(emailUsuario)
                        .comAssunto("ESPAÇO CASE - REDEFINIÇÃO DE SENHA")
                        .comConteudoHtml("Sua nova senha: " + senhaProvisoria)
                        .enviar();
                return emailUsuario;
        }
       
        @Override
        public UsuarioDTO 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);
                        UsuarioDTO usuarioConsultado = usuarioRepository.consultarPorLogin(usuario.getLogin(), usuario.getSenha());
                        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
        protected void regrasNegocioCadastrar(Usuario usuario) {
                usuario.setSenha(CriptografiaMD5.criptografaSenha(usuario.getSenha()));
                usuario.setAtivo(true);
        }
       
        @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);
        }
        */

       
}