package useCases import ( "RenewCMS/internal/domain/hash" "RenewCMS/internal/domain/user" "time" ) type ResetPasswordUseCase struct { userRepository user.Repository hasher hash.Hasher } func NewResetPasswordUseCase(userRepository user.Repository, hasher hash.Hasher) *ResetPasswordUseCase { return &ResetPasswordUseCase{userRepository, hasher} } func (r *ResetPasswordUseCase) ResetPassword(email string, code string, newPassword string) error { dbUser, err := r.userRepository.GetByEmail(email) if err != nil { return user.ErrInvalidPasswordResetCode } if dbUser.PasswordResetCode == "" || r.hasher.Compare(dbUser.PasswordResetCode, code) != nil { return user.ErrInvalidPasswordResetCode } if time.Now().After(dbUser.PasswordResetExpiration) { return user.ErrPasswordResetCodeExpired } hashedPassword, err := r.hasher.Hash(newPassword) if err != nil { return err } _, err = r.userRepository.ResetPassword(dbUser.ID, hashedPassword) return err }