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