feat: 迁移商务登录品牌和三步找回密码
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package business
|
||||
|
||||
import (
|
||||
"context"
|
||||
"kra/internal/biz/business"
|
||||
"kra/internal/service/dto"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
type PasswordResetUsecase interface {
|
||||
Check(context.Context, string) (string, error)
|
||||
SendCode(context.Context, string) (string, error)
|
||||
VerifyCode(context.Context, string, string) (string, error)
|
||||
Reset(context.Context, string, string, string) error
|
||||
}
|
||||
type PasswordResetService struct{ uc PasswordResetUsecase }
|
||||
|
||||
func NewPasswordResetService(uc *business.PasswordResetUsecase) *PasswordResetService {
|
||||
return &PasswordResetService{uc: uc}
|
||||
}
|
||||
func resetUsername(req *dto.PasswordResetRequest) (string, error) {
|
||||
if req == nil || strings.TrimSpace(req.Username) == "" || utf8.RuneCountInString(req.Username) > 30 {
|
||||
return "", business.ErrAccountInput
|
||||
}
|
||||
return strings.TrimSpace(req.Username), nil
|
||||
}
|
||||
func (s *PasswordResetService) Check(ctx context.Context, req *dto.PasswordResetRequest) (*dto.PasswordResetPhoneResponse, error) {
|
||||
name, err := resetUsername(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
phone, err := s.uc.Check(ctx, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &dto.PasswordResetPhoneResponse{MaskedPhone: phone}, nil
|
||||
}
|
||||
func (s *PasswordResetService) SendCode(ctx context.Context, req *dto.PasswordResetRequest) (*dto.PasswordResetPhoneResponse, error) {
|
||||
name, err := resetUsername(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
phone, err := s.uc.SendCode(ctx, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &dto.PasswordResetPhoneResponse{MaskedPhone: phone}, nil
|
||||
}
|
||||
func (s *PasswordResetService) VerifyCode(ctx context.Context, req *dto.PasswordResetRequest) (*dto.PasswordResetTokenResponse, error) {
|
||||
name, err := resetUsername(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(req.SMSCode) != 6 {
|
||||
return nil, business.ErrResetCode
|
||||
}
|
||||
token, err := s.uc.VerifyCode(ctx, name, req.SMSCode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &dto.PasswordResetTokenResponse{ResetToken: token}, nil
|
||||
}
|
||||
func (s *PasswordResetService) Reset(ctx context.Context, req *dto.PasswordResetRequest) error {
|
||||
if req == nil || strings.TrimSpace(req.ResetToken) == "" || strings.TrimSpace(req.NewPassword) == "" || strings.TrimSpace(req.ConfirmPassword) == "" {
|
||||
return business.ErrAccountInput
|
||||
}
|
||||
if len(req.ResetToken) != 64 {
|
||||
return business.ErrResetToken
|
||||
}
|
||||
return s.uc.Reset(ctx, req.ResetToken, req.NewPassword, req.ConfirmPassword)
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dto
|
||||
|
||||
type PasswordResetRequest struct {
|
||||
Username string `json:"username"`
|
||||
SMSCode string `json:"smsCode"`
|
||||
ResetToken string `json:"resetToken"`
|
||||
NewPassword string `json:"newPassword"`
|
||||
ConfirmPassword string `json:"confirmPassword"`
|
||||
}
|
||||
type PasswordResetPhoneResponse struct {
|
||||
MaskedPhone string `json:"maskedPhone"`
|
||||
}
|
||||
type PasswordResetTokenResponse struct {
|
||||
ResetToken string `json:"resetToken"`
|
||||
}
|
||||
@@ -15,6 +15,7 @@ var ProviderSet = wire.NewSet(
|
||||
businessservice.NewUserPreferenceService,
|
||||
businessservice.NewAccountService,
|
||||
businessservice.NewBindingService,
|
||||
businessservice.NewPasswordResetService,
|
||||
systemservice.ProviderSet,
|
||||
paymentservice.ProviderSet,
|
||||
integrationservice.ProviderSet,
|
||||
|
||||
Reference in New Issue
Block a user