custom product free -> paid

This commit is contained in:
John Yeo
2025-08-20 15:16:56 -07:00
parent b19077632c
commit 9b5a0e117d
5 changed files with 33 additions and 4 deletions

View File

@@ -450,7 +450,25 @@ export const createFullCusProduct = async ({
apiVersion: attachParams.apiVersion,
});
// Expire previous product if not one off
// Expire previous product if not one off and add on...?
if (!isOneOff(prices) && product.is_add_on) {
const { curSameProduct } = getExistingCusProducts({
product,
cusProducts: attachParams.cusProducts!,
internalEntityId: attachParams.internalEntityId,
});
if (curSameProduct) {
await CusProductService.update({
db,
cusProductId: curSameProduct.id,
updates: {
status: CusProductStatus.Expired,
},
});
}
}
if (!isOneOff(prices) && !product.is_add_on) {
await expireOrDeleteCusProduct({
db,

View File

@@ -69,6 +69,8 @@ export const handleAddProduct = async ({
anchorToUnix = end * 1000;
}
// Expire previous product
batchInsert.push(
createFullCusProduct({
db: req.db,

View File

@@ -4,6 +4,7 @@ import { processAttachBody } from "./processAttachBody.js";
import { orgToVersion } from "@/utils/versionUtils.js";
import { APIVersion } from "@autumn/shared";
import { AttachParams } from "../../../cusProducts/AttachParams.js";
import { nullish } from "@/utils/genUtils.js";
export const getAttachParams = async ({
req,
@@ -40,6 +41,10 @@ export const getAttachParams = async ({
const internalEntityId = entityId ? customer.entity?.internal_id : undefined;
const { stripeCli, stripeCus, paymentMethod, now } = stripeVars;
if (nullish(attachBody.finalize_invoice)) {
attachBody.finalize_invoice = true;
}
const attachParams: AttachParams = {
stripeCli,
stripeCus,

View File

@@ -177,8 +177,12 @@ const getSameProductBranch = async ({
curSameProduct = curSameProduct!;
// 1. If new version?
// console.log("Current same product version:", curSameProduct.product.version);
// console.log("New Product version:", product.version);
const curPrices = cusProductToPrices({ cusProduct: curSameProduct });
if (isFreeProduct(curPrices)) {
return AttachBranch.MainIsFree;
}
if (curSameProduct.product.version !== product.version) {
return AttachBranch.NewVersion;
}

View File

@@ -45,7 +45,7 @@ export const AttachBodySchema = z
reward: z.string().optional(),
invoice: z.boolean().optional(),
enable_product_immediately: z.boolean().optional(),
finalize_invoice: z.boolean().optional().default(true),
finalize_invoice: z.boolean().optional(),
})
.refine(
(data) => {