package useCases import ( "RenewCMS/internal/domain/hash" "RenewCMS/internal/domain/mail" "RenewCMS/internal/domain/user" "time" "github.com/google/uuid" ) type RequestPasswordResetUseCase struct { userRepository user.Repository hasher hash.Hasher mailRepository mail.Repository publicURL string } type MailPasswordResetData struct { Host string VerificationCode string Email string } func NewRequestPasswordResetUseCase(userRepository user.Repository, hasher hash.Hasher, mailRepository mail.Repository, publicURL string) *RequestPasswordResetUseCase { return &RequestPasswordResetUseCase{userRepository, hasher, mailRepository, publicURL} } func (g *RequestPasswordResetUseCase) RequestPasswordReset(email string) error { foundUser, err := g.userRepository.GetByEmail(email) if err != nil { return nil } rawCode := uuid.NewString() hashedCode, err := g.hasher.Hash(rawCode) if err != nil { return nil } if _, err := g.userRepository.UpdatePasswordResetCode(foundUser.ID, hashedCode, time.Now().Add(time.Hour)); err != nil { return nil } _ = g.mailRepository.Send(foundUser.Email, "passwordReset", MailPasswordResetData{ Host: g.publicURL, VerificationCode: rawCode, Email: foundUser.Email, }) return nil }