Files
hfb_sys/backend/internal/modules/qualityowner/dto.go
T

88 lines
2.5 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"`
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"`
}