public ICommandResult Handle(CadastrarUsuarioCommand command)
        {
            command.Validar();
            if (!command.IsValid)
            {
                return(new GenericCommandResult(false, "Dados inválidos!", command.Notifications));
            }

            bool usuarioExiste = Repositorio.Buscar(command.Email) != null;

            if (usuarioExiste)
            {
                return(new GenericCommandResult(false, "Já existe um usuário cadastrado com o email informado!", command.Email));
            }

            var senhaCriptografada = Senha.Criptografar(command.Senha);

            var usuario = new Usuario(command.Nome, command.Email, senhaCriptografada);

            usuario = Repositorio.Adicionar(usuario);

            if (usuario != null)
            {
                Email.MandarEmail(usuario.Email, $"Olá, {usuario.Nome}! Seja muito bem-vindo(a) ao Carongo!", "<p>No nosso sistema você pode criar ou entrar em instituições, gerenciá-las e, finalmente, criar um carômetro de seus alunos de cada instituição. Estamos sempre trabalhando em atualizações para incluir novas funcionalidades e aumentar a performance do sistema. Aproveite!</p>");
            }

            var token = JWT.Gerar(usuario.Nome, usuario.Email, usuario.Id, 120);

            return(new GenericCommandResult(true, $"Seja muito bem vindo, {usuario.Nome}!", token));
        }
        public ICommandResult Entrar(LogarCommand command, [FromServices] LogarCommandHandler handler)
        {
            var resultado = (GenericCommandResult)handler.Handle(command);

            if (resultado.Sucesso)
            {
                var usuario = (Usuario)resultado.Dados;
                var token   = JWT.Gerar(usuario.Nome, usuario.Email, usuario.Id, 120);

                return(new GenericCommandResult(resultado.Sucesso, resultado.Mensagem, token));
            }

            return(resultado);
        }
        public ICommandResult Handle(SolicitarNovaSenhaCommand command)
        {
            command.Validar();
            if (!command.IsValid)
            {
                return(new GenericCommandResult(false, "Dados inválidos!", command.Notifications));
            }

            var usuario = Repositorio.Buscar(command.Email);

            if (usuario == null)
            {
                return(new GenericCommandResult(false, "Não existe nenhum usuário cadastrado com o email informado!", command.Email));
            }

            string token = JWT.Gerar(usuario.Nome, usuario.Email, usuario.Id, 5);

            string link = "http://localhost:3000/esqueci-minha-senha/redefinir-senha/" + token;

            Email.MandarEmail(usuario.Email, $"Olá, {usuario.Nome}!", $"<p>Você solicitou um link para redefinir sua senha? Se não foi você, apenas ignore este email. Se foi você, clique no botão abaixo para ser redirecionado para uma página onde você poderá redefinir sua senha. O link estará disponível por apenas 5 minutos.</p><br><a href='${link}'><button>Ir!</button></a><a>{link}</a>");

            return(new GenericCommandResult(true, "Um email com mais instruções de redefinição de senha foi mandado para o endereço informado. Caso demore mais de 2 minutos, verifique a caixa de spam e a caixa de promoções. Se não estiver, solicite novamente.", null));
        }