Files
hfb_sys/backend/internal/modules/qualityowner/dto.go
T
yml2213 98174c0e33 feat(quality-owner): 增加优质号主、极品专区与无忧租号保险
- 支持保证金余额支付、在线支付开通及后台手动设置审计
- 新增极品专区发布权限、赔付方案与保险结算费率快照
- 优化首页、商品卡和个人中心的优质号主身份展示
2026-11-04 15:04:35 +08:00

86 lines
2.3 KiB
Go

package qualityowner
import (
"encoding/json"
"errors"
"time"
)
const (
ConfigKey = "quality_owner.rules"
StatusNone = "none"
StatusActive = "active"
DepositSourcePaid = "paid"
DepositSourceManual = "manual"
defaultDepositCent = int64(20_000)
defaultInsuranceBps = 800
defaultPremiumRateBps = 400
)
var ErrInvalidRules = errors.New("invalid quality owner rules")
type Rules struct {
DepositAmountCent int64 `json:"deposit_amount_cent"`
InsuranceFeeBps int `json:"insurance_fee_bps"`
PremiumInsuranceFeeBps int `json:"premium_insurance_fee_bps"`
}
func DefaultRules() Rules {
return Rules{
DepositAmountCent: defaultDepositCent,
InsuranceFeeBps: defaultInsuranceBps,
PremiumInsuranceFeeBps: defaultPremiumRateBps,
}
}
func DefaultConfigValue() string {
raw, _ := json.Marshal(DefaultRules())
return string(raw)
}
func ParseConfigValue(value string) (Rules, error) {
rules := DefaultRules()
if value == "" {
return rules, nil
}
if err := json.Unmarshal([]byte(value), &rules); err != nil {
return Rules{}, ErrInvalidRules
}
if rules.DepositAmountCent <= 0 || rules.DepositAmountCent > 10_000_000 {
return Rules{}, ErrInvalidRules
}
if rules.InsuranceFeeBps < 0 || rules.InsuranceFeeBps > 10_000 {
return Rules{}, ErrInvalidRules
}
if rules.PremiumInsuranceFeeBps < 0 || rules.PremiumInsuranceFeeBps > rules.InsuranceFeeBps {
return Rules{}, ErrInvalidRules
}
return rules, nil
}
func MarshalConfig(rules Rules) (string, error) {
raw, err := json.Marshal(rules)
if err != nil {
return "", err
}
return string(raw), nil
}
type StatusDTO struct {
UserID uint64 `json:"user_id"`
Active bool `json:"active"`
Status string `json:"status"`
DepositAmountCent int64 `json:"deposit_amount_cent"`
DepositSource string `json:"deposit_source"`
ActivatedAt *time.Time `json:"activated_at"`
AvailableBalanceCent int64 `json:"available_balance_cent"`
RequiredDepositCent int64 `json:"required_deposit_cent"`
InsuranceFeeBps int `json:"insurance_fee_bps"`
PremiumInsuranceFeeBps int `json:"premium_insurance_fee_bps"`
}
type AdminSetRequest struct {
Enabled bool `json:"enabled"`
Reason string `json:"reason" binding:"required"`
}