package logic import ( "context" "fmt" "member/internal/domain" ers "member/internal/lib/error" "member/internal/lib/required" "member/gen_result/pb/member" "member/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) type VerifyRefreshCodeLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewVerifyRefreshCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *VerifyRefreshCodeLogic { return &VerifyRefreshCodeLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // VerifyRefreshCode 驗證忘記密碼 token func (l *VerifyRefreshCodeLogic) VerifyRefreshCode(in *member.VerifyRefreshCodeReq) (*member.Response, error) { err := required.ValidateAll(l.svcCtx.Validate, &generateRefreshCodeReq{ Account: in.GetAccount(), CodeType: in.GetCodeType(), }) if err != nil { return nil, ers.InvalidFormat(err.Error()) } checkType, status := getCodeNameByCode(in.GetCodeType()) if !status { return nil, ers.InvalidFormat(fmt.Errorf("failed to get correct code type").Error()) } rk := fmt.Sprintf("verify:%s:%s", checkType, in.GetAccount()) get, err := l.svcCtx.Redis.Get(rk) if err != nil { return nil, ers.DBError("failed to connect to redis", err.Error()) } if get == "" { return nil, ers.DBError("failed to get data from redis") } if get != fmt.Sprintf("%d", in.CodeType) { return nil, ers.ArkInternal("Illegible Verify Code") } _, err = l.svcCtx.Redis.Del(rk) if err != nil { return nil, ers.DBError("failed to del redis key", rk) } return &member.Response{ Status: &member.BaseResp{ Code: domain.CodeOk.ToString(), Message: "success", Error: "", }, }, nil }