Files
cfw-autumn/server/tests/utils/testProductUtils/testProductUtils.ts
2025-09-22 14:45:25 +01:00

77 lines
1.7 KiB
TypeScript

import { isFixedPrice } from "@/internal/products/prices/priceUtils/usagePriceUtils/classifyUsagePrice.js";
import { isPriceItem } from "@/internal/products/product-items/productItemUtils/getItemType.js";
import { nullish } from "@/utils/genUtils.js";
import {
BillingInterval,
FixedPriceConfig,
FullProduct,
Price,
ProductItem,
ProductV2,
} from "@autumn/shared";
export const addPrefixToProducts = ({
products,
prefix,
}: {
products: ProductV2[];
prefix: string;
}) => {
for (const product of products) {
product.id = `${prefix}_${product.id}`;
product.name = `${prefix} ${product.name}`;
product.group = prefix;
}
return products;
};
export const replaceItems = ({
featureId,
interval,
intervalCount,
newItem,
items,
}: {
featureId?: string;
interval?: BillingInterval;
intervalCount?: number;
newItem: ProductItem;
items: ProductItem[];
}) => {
let newItems = structuredClone(items);
let index;
if (featureId) {
index = newItems.findIndex((item) => item.feature_id == featureId);
}
if (interval) {
index = newItems.findIndex(
(item) =>
item.interval == (interval as any) &&
(intervalCount ? item.interval_count == intervalCount : true) &&
nullish(item.feature_id),
);
}
if (index == -1) {
throw new Error("Item not found");
}
newItems[index!] = newItem;
return newItems;
};
export const getBasePrice = ({ product }: { product: ProductV2 }) => {
return product.items.find((item) => isPriceItem(item))?.price || 0;
};
export const v1ProductToBasePrice = ({ prices }: { prices: Price[] }) => {
let fixedPrice = prices.find((price) => isFixedPrice({ price }));
if (fixedPrice) {
return (fixedPrice.config as FixedPriceConfig).amount;
} else return 0;
};