package user import ( "backend/internal/svc" "backend/internal/types" errs "backend/pkg/library/errors" mbr "backend/pkg/member/domain/member" member "backend/pkg/member/domain/usecase" "backend/pkg/permission/domain/token" "context" "github.com/zeromicro/go-zero/core/logx" ) type SubmitVerificationCodeLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // NewSubmitVerificationCodeLogic 交驗證碼以完成驗證 func NewSubmitVerificationCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SubmitVerificationCodeLogic { return &SubmitVerificationCodeLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *SubmitVerificationCodeLogic) SubmitVerificationCode(req *types.SubmitVerificationCodeReq) (*types.RespOK, error) { var ct mbr.GenerateCodeType switch req.Purpose { case "email_verification": ct = mbr.GenerateCodeTypeEmail case "phone_verification": ct = mbr.GenerateCodeTypePhone default: return &types.RespOK{}, errs.InputInvalidRangeError("failed to get correct verification type") } info, err := l.svcCtx.AccountUC.GetUserAccountInfo(l.ctx, member.GetUIDByAccountRequest{Account: token.LoginID(l.ctx)}) if err != nil { return nil, err } // 先驗證,不刪除 if err = l.svcCtx.AccountUC.CheckRefreshCode(l.ctx, member.VerifyRefreshCodeRequest{ VerifyCode: req.VerifyCode, LoginID: info.Data.LoginID, CodeType: ct, }); err != nil { e := errs.AuthForbiddenError("failed to get verify code").Wrap(err) return nil, e } return &types.RespOK{}, nil }