Passo 2 - gerando token
A partir do momento que precisamos salvar algo no banco, precisamos criar uma entidade. Vamos criar uma classe chamada "PasswordRecover", fazer as suas anotações para virar uma table.
Ela terá ID e um token do tipo String, um String email e o tempo de expiração do tipo Instant. ⬅️ Todos esses campos são obrigatórios.
Colocar getters and setters + hashcode&equals com a ID.
Voltamos no service para continuar a lógica! Criaremos um objeto do tipo PasswordRecover. A partir disso, settaremos os seus atributos.
O email, será o que veio do DTO.
O token criaremos um do tipo UUID.randomUUID().toString
.
A expiração será Instant.now().plus(tempo que queremos). Esse tempo, virá das variáveis que estarão no application.properties ⬇️.
Variáveis para recuperação de senha
email.password-recover.token.minutes=${PASSWORD_RECOVER_TOKEN_MINUTES:30}
email.password-recover.uri=${PASSWORD_RECOVER_URI:http://localhost:5173/recover-password/}
Essa URI é o endereço que chegará no email do usuário, o endereço do frontend fica no lugar do localhost.
Para ler a variável do token.minutes, só injetar ela no service com @Value:
@Value("${email.password-recover.token.minutes}")
private Long tokenMinutes;
Inserir isso dentro do ".plus()" ⬆️ (se não tiver minutos, multiplicar por 60L).
Para salvarmos no banco de dados, criar um repository para o PasswordRecover.
Atualizado