feat(admin): add create-and-redeem API and payment integration docs
This commit is contained in:
@@ -174,6 +174,33 @@ func (s *RedeemService) GenerateCodes(ctx context.Context, req GenerateCodesRequ
|
||||
return codes, nil
|
||||
}
|
||||
|
||||
// CreateCode creates a redeem code with caller-provided code value.
|
||||
// It is primarily used by admin integrations that require an external order ID
|
||||
// to be mapped to a deterministic redeem code.
|
||||
func (s *RedeemService) CreateCode(ctx context.Context, code *RedeemCode) error {
|
||||
if code == nil {
|
||||
return errors.New("redeem code is required")
|
||||
}
|
||||
code.Code = strings.TrimSpace(code.Code)
|
||||
if code.Code == "" {
|
||||
return errors.New("code is required")
|
||||
}
|
||||
if code.Type == "" {
|
||||
code.Type = RedeemTypeBalance
|
||||
}
|
||||
if code.Type != RedeemTypeInvitation && code.Value <= 0 {
|
||||
return errors.New("value must be greater than 0")
|
||||
}
|
||||
if code.Status == "" {
|
||||
code.Status = StatusUnused
|
||||
}
|
||||
|
||||
if err := s.redeemRepo.Create(ctx, code); err != nil {
|
||||
return fmt.Errorf("create redeem code: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// checkRedeemRateLimit 检查用户兑换错误次数是否超限
|
||||
func (s *RedeemService) checkRedeemRateLimit(ctx context.Context, userID int64) error {
|
||||
if s.cache == nil {
|
||||
|
||||
Reference in New Issue
Block a user