package user import ( "Yimaru-Backend/internal/domain" "context" "time" ) func (s *Service) SendResetCode(ctx context.Context, medium domain.OtpMedium, sentTo string, provider domain.SMSProvider, companyID domain.ValidInt64) error { var err error // check if user exists switch medium { case domain.OtpMediumEmail: _, err = s.userStore.GetUserByEmailPhone(ctx, sentTo, "", companyID) case domain.OtpMediumSms: _, err = s.userStore.GetUserByEmailPhone(ctx, "", sentTo, companyID) } if err != nil { return err } return s.SendOtp(ctx, sentTo, domain.OtpReset, medium, provider) } func (s *Service) ResetPassword(ctx context.Context, resetReq domain.ResetPasswordReq) error { var sentTo string if resetReq.OtpMedium == domain.OtpMediumEmail { sentTo = resetReq.Email } else { sentTo = resetReq.PhoneNumber } otp, err := s.otpStore.GetOtp( ctx, sentTo, domain.OtpReset, resetReq.OtpMedium) if err != nil { return err } // if otp.Used { return domain.ErrOtpAlreadyUsed } if time.Now().After(otp.ExpiresAt) { return domain.ErrOtpExpired } if otp.Otp != resetReq.Otp { return domain.ErrInvalidOtp } // hash password // hashedPassword, err := hashPassword(resetReq.Password) // if err != nil { // return err // } // reset pass and mark otp as used err = s.userStore.UpdatePassword(ctx, resetReq.Password, resetReq.Email, resetReq.PhoneNumber, resetReq.OrganizationID, time.Now()) if err != nil { return err } return nil }