倍率问题和图片问题调整
This commit is contained in:
@@ -4,7 +4,7 @@ import {
|
||||
updateBillingPriceRule,
|
||||
type BillingPriceRuleInput
|
||||
} from "@/lib/server/billing-store";
|
||||
import type { BillingPriceRule } from "@/lib/types";
|
||||
import type { BillingParameterDimension, BillingPriceRule } from "@/lib/types";
|
||||
|
||||
export const BILLING_USD_CNY_RATE = 7.2;
|
||||
export const DEFAULT_BILLING_MARKUP_MULTIPLIER = 1.2;
|
||||
@@ -390,7 +390,7 @@ export async function ensureDefaultBillingPriceRules(): Promise<BillingPriceRule
|
||||
priority: candidate.priority,
|
||||
note: candidate.note,
|
||||
source: candidate.source,
|
||||
parameterDimensions: candidate.parameterDimensions
|
||||
parameterDimensions: mergeParameterDimensions(candidate.parameterDimensions, existingRule.parameterDimensions)
|
||||
});
|
||||
if (updated) {
|
||||
const index = existing.findIndex((rule) => rule.id === updated.id);
|
||||
@@ -412,6 +412,31 @@ export async function ensureDefaultBillingPriceRules(): Promise<BillingPriceRule
|
||||
return [...existing, ...created];
|
||||
}
|
||||
|
||||
function mergeParameterDimensions(
|
||||
defaults: BillingParameterDimension[] | undefined,
|
||||
saved: BillingParameterDimension[] | undefined
|
||||
): BillingParameterDimension[] | undefined {
|
||||
return defaults?.map((dimension) => {
|
||||
const savedDimension = saved?.find((item) => item.key === dimension.key);
|
||||
return {
|
||||
...dimension,
|
||||
tiers: dimension.tiers.map((tier) => {
|
||||
const savedTier = savedDimension?.tiers.find((item) => String(item.value) === String(tier.value));
|
||||
const savedMarkup = savedTier?.markupMultiplier;
|
||||
return {
|
||||
...tier,
|
||||
markupMultiplier: typeof savedMarkup === "number"
|
||||
&& Number.isFinite(savedMarkup)
|
||||
&& savedMarkup >= 1
|
||||
&& savedMarkup <= 1000
|
||||
? savedMarkup
|
||||
: tier.markupMultiplier
|
||||
};
|
||||
})
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function priceRuleMatchKey(rule: Pick<BillingPriceRule, "provider" | "capability" | "reqKey" | "variantKey" | "conditions">): string {
|
||||
const conditions = Object.fromEntries(Object.entries(rule.conditions || {}).sort(([left], [right]) => left.localeCompare(right)));
|
||||
return [rule.provider, rule.capability, rule.reqKey || "", rule.variantKey || "", JSON.stringify(conditions)].join("\u0000");
|
||||
|
||||
Reference in New Issue
Block a user