diff --git a/lib/api/controllers/users/userId/deleteUserById.ts b/lib/api/controllers/users/userId/deleteUserById.ts index da2f10e..e055837 100644 --- a/lib/api/controllers/users/userId/deleteUserById.ts +++ b/lib/api/controllers/users/userId/deleteUserById.ts @@ -184,27 +184,20 @@ export default async function deleteUserById( try { if (user.subscriptions?.id) { - const listByEmail = await stripe.customers.list({ - email: user.email?.toLowerCase(), - expand: ["data.subscriptions"], - }); + const deleted = await stripe.subscriptions.cancel( + user.subscriptions.stripeSubscriptionId, + { + cancellation_details: { + comment: body.cancellation_details?.comment, + feedback: body.cancellation_details?.feedback, + }, + } + ); - if (listByEmail.data[0].subscriptions?.data[0].id) { - const deleted = await stripe.subscriptions.cancel( - listByEmail.data[0].subscriptions?.data[0].id, - { - cancellation_details: { - comment: body.cancellation_details?.comment, - feedback: body.cancellation_details?.feedback, - }, - } - ); - - return { - response: deleted, - status: 200, - }; - } + return { + response: deleted, + status: 200, + }; } else if (user.parentSubscription?.id && user && user.emailVerified) { await updateSeats( user.parentSubscription.stripeSubscriptionId, diff --git a/lib/api/stripe/handleSubscription.ts b/lib/api/stripe/handleSubscription.ts index 8f41e2e..2e61362 100644 --- a/lib/api/stripe/handleSubscription.ts +++ b/lib/api/stripe/handleSubscription.ts @@ -7,6 +7,11 @@ type Data = { quantity: number; periodStart: number; periodEnd: number; + action: + | "customer.subscription.created" + | "customer.subscription.updated" + | "customer.subscription.deleted" + | "customer.subscription.cancelled"; }; export default async function handleSubscription({ @@ -15,6 +20,7 @@ export default async function handleSubscription({ quantity, periodStart, periodEnd, + action, }: Data) { const subscription = await prisma.subscription.findUnique({ where: { @@ -57,7 +63,13 @@ export default async function handleSubscription({ }, }); - if (!user) throw new Error("User not found"); + if (!user) { + if (action === "customer.subscription.deleted") { + return "User not found or deleted"; + } else { + throw new Error("User not found"); + } + } const userId = user.id; diff --git a/pages/api/v1/webhook/index.ts b/pages/api/v1/webhook/index.ts index c2e9ef7..8f6972a 100644 --- a/pages/api/v1/webhook/index.ts +++ b/pages/api/v1/webhook/index.ts @@ -72,6 +72,7 @@ export default async function webhook( quantity: data?.quantity ?? 1, periodStart: data.current_period_start, periodEnd: data.current_period_end, + action: "customer.subscription.created", }); break; @@ -82,6 +83,7 @@ export default async function webhook( quantity: data?.quantity ?? 1, periodStart: data.current_period_start, periodEnd: data.current_period_end, + action: "customer.subscription.updated", }); break; @@ -92,6 +94,7 @@ export default async function webhook( quantity: data?.lines?.data[0]?.quantity ?? 1, periodStart: data.current_period_start, periodEnd: data.current_period_end, + action: "customer.subscription.deleted", }); break; @@ -102,6 +105,7 @@ export default async function webhook( quantity: data?.lines?.data[0]?.quantity ?? 1, periodStart: data.current_period_start, periodEnd: data.current_period_end, + action: "customer.subscription.cancelled", }); break;