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"` CanCancel bool `json:"can_cancel"` ActivePremiumListings int64 `json:"active_premium_listing_count"` 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"` }