From 4e147dec680e64bf5e494d7fded501c5752611d9 Mon Sep 17 00:00:00 2001 From: John Yeo Date: Tue, 18 Nov 2025 11:36:55 +0000 Subject: [PATCH] fix: renew when there's new version available --- .../attachParamsUtils/getCusAndProducts.ts | 19 +++++++++++++++++++ server/src/test.ts | 0 server/tests/attach/basic/basic5.test.ts | 6 +++--- shared/api/models.ts | 1 + 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 server/src/test.ts diff --git a/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getCusAndProducts.ts b/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getCusAndProducts.ts index 76a5d4d0e..218ba9168 100644 --- a/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getCusAndProducts.ts +++ b/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getCusAndProducts.ts @@ -2,6 +2,7 @@ import { type AttachBody, CusProductStatus, type CustomerData, + cusProductToProduct, ErrCode, nullish, } from "@autumn/shared"; @@ -11,6 +12,7 @@ import { isOneOff } from "@/internal/products/productUtils.js"; import RecaseError from "@/utils/errorUtils.js"; import { notNullish } from "@/utils/genUtils.js"; import type { ExtendedRequest } from "@/utils/models/Request.js"; +import { getExistingCusProducts } from "../../../../cusProducts/cusProductUtils/getExistingCusProducts"; const getProductsForAttach = async ({ req, @@ -93,5 +95,22 @@ export const getCustomerAndProducts = async ({ getProductsForAttach({ req, attachBody }), ]); + if (nullish(attachBody.version)) { + for (let i = 0; i < products.length; i++) { + // Check if customer has active product + const { curSameProduct } = getExistingCusProducts({ + product: products[i], + cusProducts: customer.customer_products, + internalEntityId: customer.entity?.internal_id, + }); + + // console.log( + // `Product ${product.id} (${product.version}), curSameProduct: ${curSameProduct?.product.id} (version: ${curSameProduct?.product.version})`, + // ); + if (curSameProduct) { + products[i] = cusProductToProduct({ cusProduct: curSameProduct }); + } + } + } return { customer, products }; }; diff --git a/server/src/test.ts b/server/src/test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/server/tests/attach/basic/basic5.test.ts b/server/tests/attach/basic/basic5.test.ts index 2601c5cc7..bd461a976 100644 --- a/server/tests/attach/basic/basic5.test.ts +++ b/server/tests/attach/basic/basic5.test.ts @@ -1,11 +1,11 @@ import { beforeAll, describe, expect, test } from "bun:test"; import { CusProductStatus } from "@autumn/shared"; +import { AutumnCli } from "@tests/cli/AutumnCli.js"; +import { compareMainProduct } from "@tests/utils/compare.js"; +import ctx from "@tests/utils/testInitUtils/createTestContext.js"; import chalk from "chalk"; import type Stripe from "stripe"; -import { AutumnCli } from "tests/cli/AutumnCli.js"; import { products } from "tests/global.js"; -import { compareMainProduct } from "tests/utils/compare.js"; -import ctx from "tests/utils/testInitUtils/createTestContext.js"; import { createStripeCli } from "@/external/connect/createStripeCli.js"; import { timeout } from "@/utils/genUtils.js"; import { initCustomerV3 } from "@/utils/scriptUtils/testUtils/initCustomerV3.js"; diff --git a/shared/api/models.ts b/shared/api/models.ts index 2a415c6c9..e19bba59a 100644 --- a/shared/api/models.ts +++ b/shared/api/models.ts @@ -60,6 +60,7 @@ export * from "./referrals/referralsOpenApi.js"; // Balances export * from "./balances/check/previousVersions/CheckResponseV0.js"; +// export * from "./common/customerData.js"; // Errors export * from "./errors/index.js"; // Models