95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
import { getStripeSubs } from "@/external/stripe/stripeSubUtils.js";
|
|
import { getStripeSubItems } from "@/external/stripe/stripeSubUtils/getStripeSubItems.js";
|
|
import { subToAutumnInterval } from "@/external/stripe/utils.js";
|
|
import { AttachParams } from "@/internal/customers/cusProducts/AttachParams.js";
|
|
import { ExtendedRequest } from "@/utils/models/Request.js";
|
|
import {
|
|
AttachConfig,
|
|
FullCusProduct,
|
|
intervalsSame,
|
|
Replaceable,
|
|
} from "@autumn/shared";
|
|
import { addSubItemsToRemove } from "../attachFuncUtils.js";
|
|
import { updateStripeSub } from "../../attachUtils/updateStripeSub/updateStripeSub.js";
|
|
import { insertInvoiceFromAttach } from "@/internal/invoices/invoiceUtils.js";
|
|
import Stripe from "stripe";
|
|
import { getContUseInvoiceItems } from "../../attachUtils/getContUseItems/getContUseInvoiceItems.js";
|
|
|
|
export const updateSubsByInt = async ({
|
|
req,
|
|
curCusProduct,
|
|
attachParams,
|
|
config,
|
|
stripeSubs,
|
|
}: {
|
|
req: ExtendedRequest;
|
|
curCusProduct: FullCusProduct;
|
|
attachParams: AttachParams;
|
|
config: AttachConfig;
|
|
stripeSubs: Stripe.Subscription[];
|
|
}) => {
|
|
const { db, logtail: logger } = req;
|
|
|
|
let { replaceables, newItems } = await getContUseInvoiceItems({
|
|
attachParams,
|
|
cusProduct: curCusProduct!,
|
|
stripeSubs,
|
|
logger,
|
|
});
|
|
|
|
attachParams.replaceables = replaceables;
|
|
|
|
const itemSets = await getStripeSubItems({ attachParams });
|
|
|
|
const invoices: Stripe.Invoice[] = [];
|
|
|
|
for (const sub of stripeSubs) {
|
|
let subInterval = subToAutumnInterval(sub);
|
|
let itemSet = itemSets.find((itemSet) => {
|
|
return intervalsSame({
|
|
intervalA: itemSet,
|
|
intervalB: subInterval,
|
|
});
|
|
})!;
|
|
|
|
await addSubItemsToRemove({
|
|
sub,
|
|
cusProduct: curCusProduct,
|
|
itemSet,
|
|
});
|
|
|
|
const { latestInvoice } = await updateStripeSub({
|
|
db,
|
|
attachParams,
|
|
config,
|
|
stripeSubs: [sub],
|
|
itemSet,
|
|
logger,
|
|
interval: itemSet.interval,
|
|
intervalCount: itemSet.intervalCount,
|
|
});
|
|
|
|
if (latestInvoice) {
|
|
invoices.push(latestInvoice);
|
|
}
|
|
|
|
logger.info(
|
|
`Updated sub ${sub.id}, interval ${itemSet.interval}, intervalCount ${itemSet.intervalCount}`
|
|
);
|
|
}
|
|
|
|
const batchInvUpdate = [];
|
|
for (const invoice of invoices) {
|
|
batchInvUpdate.push(
|
|
insertInvoiceFromAttach({
|
|
db,
|
|
attachParams,
|
|
stripeInvoice: invoice,
|
|
logger,
|
|
})
|
|
);
|
|
}
|
|
|
|
return { replaceables, invoices };
|
|
};
|