diogomene15 / TrabalhoFinal-GCS

Trabalho final da disciplina de Gerência de Configuração de Software, realizado pelos alunos Diogo de Lima Menezes, João Pedro Cintra Karpinski e Luis Henrique Souza Carvalho
0 stars 0 forks source link

Permitir recuperação de senha de usuário, por meio de serviço de e-mail #5

Open diogomene15 opened 2 weeks ago

diogomene15 commented 2 weeks ago

O projeto atual da aplicação possui um sistema de autenticação que permite aos usuários acessarem suas contas utilizando um endereço de email e uma senha. No entanto, não há uma funcionalidade que permita a restauração de senha caso o usuário a esqueça, o que pode resultar em frustração e dificuldades de acesso para os usuários. Considerando a importância de garantir uma boa experiência do usuário e a necessidade de facilitar o acesso à aplicação, é imprescindível a implementação de um mecanismo de recuperação de senha.

A ausência de uma funcionalidade de recuperação de senha pode levar à perda de usuários, uma vez que eles podem não conseguir acessar suas contas caso esqueçam a senha. Isso não apenas afeta negativamente a experiência do usuário, mas também compromete a retenção e satisfação dos usuários com a aplicação. Além disso, muitos aplicativos modernos oferecem essa funcionalidade, tornando-a uma expectativa comum entre os usuários.

Para resolver esse problema, proponho a implementação de um fluxo de recuperação de senha na aplicação. Esse fluxo deve incluir a possibilidade de solicitar um link de redefinição de senha via email, a partir da tela de login. No arquivo LoginFragment.java, podemos adicionar um botão "Esqueci minha senha" que, ao ser clicado, direciona o usuário para uma tela onde ele pode inserir seu email para receber instruções de redefinição de senha.

Um exemplo de código para essa funcionalidade poderia ser:

Button forgotPasswordButton = findViewById(R.id.forgot_password_button);
forgotPasswordButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(LoginFragment.this, PasswordResetActivity.class);
        startActivity(intent);
    }
});

Na nova atividade, PasswordResetActivity, o usuário pode inserir seu email e solicitar a redefinição de senha:

Button resetPasswordButton = findViewById(R.id.reset_password_button);
resetPasswordButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String email = emailEditText.getText().toString().trim();
        if (!TextUtils.isEmpty(email)) {
            // Lógica para enviar o email de redefinição de senha
            sendPasswordResetEmail(email);
        } else {
            emailEditText.setError("Por favor, insira um email válido");
        }
    }
});

A lógica para enviar o email de redefinição de senha pode ser implementada em uma nova classe EmailService, utilizando um serviço de email para enviar o link de redefinição de senha para o email informado pelo usuário:

public void sendPasswordResetEmail(String email) {
    // Implemente a lógica de envio de email aqui
    // Por exemplo, utilizando Firebase Authentication:
    FirebaseAuth.getInstance().sendPasswordResetEmail(email)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "Email de redefinição de senha enviado.");
                } else {
                    Log.d(TAG, "Falha ao enviar email de redefinição de senha.");
                }
            }
        });
}

Acho importante verificar a disposição dos pacotes existentes no projeto. O único pacote que parece ser minimamente adequado a receber classes de service e utilities da nova função é o useCases. Contudo, se interpretarmos o projeto a partir de uma visão de arquitetura hexagonal, dispor as classes nesse pacote pode ser conceitualmente inadequada, podendo vir a gerar, no futuro, problemas arquiteturais, com novas funcionalidades, que dependem de classes que interagem com agentes externas no pacote (possivelmente) incorreto,.

Recomendo o envolvimento das equipes de UI/UX, Requisitos e Desenvolvimento para discutir e validar essa funcionalidade. A equipe de UI/UX pode criar protótipos da nova interface de recuperação de senha, garantindo que ela seja intuitiva e fácil de usar. A equipe de Requisitos deve garantir que todos os casos de uso e fluxos de usuário estejam claramente definidos. Solicito a revisão de proposta de código e arquitetura pela equipe de desenvolvimento, a fim de garantir a qualidade da implementação da função a longo prazo.

diogomene15 commented 2 weeks ago

@luishscarvalho, poderia auxiliar no atendimento dessa demanda? Estarei te colocando como participante. Qualquer dúvida, fico à disposição.

luishscarvalho commented 2 weeks ago

Claro, @diogomene15. Estarei trabalhando com a equipe de desenvolvimento, requisitos UX para esta demanda.