fix gateway loopback validation chains

This commit is contained in:
2026-05-11 08:48:02 +08:00
parent ff666b1ece
commit ca7e76e815
42 changed files with 1641 additions and 129 deletions
+57
View File
@@ -176,6 +176,63 @@ func (s *Store) DeletePricingRuleSet(ctx context.Context, id string) error {
return nil
}
func (s *Store) PricingRuleSetBillingConfig(ctx context.Context, id string) (map[string]any, error) {
id = strings.TrimSpace(id)
if id == "" {
return nil, nil
}
rows, err := s.pool.Query(ctx, `
SELECT resource_type, base_price::float8, dynamic_weight
FROM model_pricing_rules
WHERE rule_set_id = $1::uuid
AND status = 'active'
ORDER BY priority ASC, resource_type ASC`, id)
if err != nil {
return nil, err
}
defer rows.Close()
config := map[string]any{}
for rows.Next() {
var resourceType string
var basePrice float64
var dynamicWeightBytes []byte
if err := rows.Scan(&resourceType, &basePrice, &dynamicWeightBytes); err != nil {
return nil, err
}
dynamicWeight := decodeObject(dynamicWeightBytes)
switch resourceType {
case "text_input":
config["textInputPer1k"] = basePrice
case "text_output":
config["textOutputPer1k"] = basePrice
case "image":
config["imageBase"] = basePrice
config["image"] = pricingResourceConfig(basePrice, dynamicWeight)
case "image_edit":
config["editBase"] = basePrice
config["image_edit"] = pricingResourceConfig(basePrice, dynamicWeight)
case "video":
config["videoBase"] = basePrice
config["video"] = pricingResourceConfig(basePrice, dynamicWeight)
default:
config[resourceType] = pricingResourceConfig(basePrice, dynamicWeight)
}
}
if err := rows.Err(); err != nil {
return nil, err
}
return config, nil
}
func pricingResourceConfig(basePrice float64, dynamicWeight map[string]any) map[string]any {
config := map[string]any{"basePrice": basePrice}
if len(dynamicWeight) > 0 {
config["dynamicWeight"] = dynamicWeight
}
return config
}
func insertPricingRules(ctx context.Context, tx pgx.Tx, ruleSetID string, defaultCurrency string, rules []PricingRuleInput) error {
for index, rule := range rules {
rule = normalizePricingRule(rule, index, defaultCurrency)