public async Task <RespostaApi> Executar(RedefinirSenhaDto dto)
        {
            var usuario = await mediator.Send(new ObterUsuarioPorTokenRedefinicaoQuery(dto.Token));

            usuario.ValidarTokenRedefinicao(dto.Token);

            var usuarioCore = await mediator.Send(new ObterUsuarioCoreSSOQuery(usuario.Cpf));

            if (usuarioCore == null)
            {
                throw new NegocioException("Usuário não encontrado no CoreSSO");
            }

            usuarioCore.AlterarSenha(dto.Senha);

            await Validar5UltimasSenhas(usuarioCore);

            await AlterarSenhaUsuarioCoreSSO(usuarioCore);

            await IncluirSenhaHistorico(usuarioCore);

            usuario.FinalizarRedefinicaoSenha();

            await mediator.Send(new SalvarUsuarioCommand(usuario));

            return(await AutenticarUsuario(dto, usuario));
        }
        private async Task <RespostaApi> AutenticarUsuario(RedefinirSenhaDto dto, Dominio.Entidades.Usuario usuario)
        {
            var autenticacao = await mediator.Send(new AutenticarUsuarioCommand(usuario.Cpf, dto.Senha));

            if (!autenticacao.Ok)
            {
                throw new NegocioException(string.Join(',', autenticacao.Erros));
            }

            var token = await mediator.Send(new CriarTokenCommand(usuario.Cpf));

            await mediator.Send(new UsuarioDispositivoCommand(usuario.Cpf, dto.DispositivoId));

            ((RespostaAutenticar)autenticacao.Data).Token = token;

            return(autenticacao);
        }
 public async Task <ActionResult <RespostaApi> > RedefinirSenha([FromBody] RedefinirSenhaDto redefinirSenhaDto, [FromServices] IRedefinirSenhaUseCase redefinirSenhaUseCase)
 {
     return(await redefinirSenhaUseCase.Executar(redefinirSenhaDto));
 }