package user import ( "Yimaru-Backend/internal/domain" "context" "time" ) func (s *Service) SendResetCode(ctx context.Context, userID int64, medium domain.OtpMedium, sentTo string, provider domain.SMSProvider) error { var err error // check if user exists switch medium { case domain.OtpMediumEmail: _, err = s.userStore.GetUserByEmailPhone(ctx, sentTo, "") case domain.OtpMediumSms: _, err = s.userStore.GetUserByEmailPhone(ctx, "", sentTo) } if err != nil { return err } return s.SendOtp(ctx, userID, sentTo, domain.OtpReset, medium, provider) } func (s *Service) ResetPassword(ctx context.Context, resetReq domain.ResetPasswordReq) error { otp, err := s.otpStore.GetOtp(ctx, resetReq.UserID) if err != nil { return err } // user, err := s.userStore.GetUserByUserName(ctx, resetReq.UserName) // if err != nil { // return err // } if otp.Used { return domain.ErrOtpAlreadyUsed } if time.Now().After(otp.ExpiresAt) { return domain.ErrOtpExpired } if otp.Otp != resetReq.OtpCode { return domain.ErrInvalidOtp } err = s.userStore.UpdatePassword(ctx, resetReq.Password, resetReq.UserID) if err != nil { return err } return nil }