fix(stripe): attempt to fix the servers assignation when the user pay

This commit is contained in:
Mauricio Siu
2024-11-13 23:29:24 -06:00
parent d081d477ef
commit 17e9a1a497

View File

@@ -88,7 +88,6 @@ export default async function handler(
.update(admins) .update(admins)
.set({ .set({
stripeSubscriptionId: newSubscription.id, stripeSubscriptionId: newSubscription.id,
serversQuantity: 0,
stripeCustomerId: newSubscription.customer as string, stripeCustomerId: newSubscription.customer as string,
}) })
.where(eq(admins.stripeCustomerId, newSubscription.customer as string)) .where(eq(admins.stripeCustomerId, newSubscription.customer as string))
@@ -121,12 +120,6 @@ export default async function handler(
} }
case "customer.subscription.updated": { case "customer.subscription.updated": {
const newSubscription = event.data.object as Stripe.Subscription; const newSubscription = event.data.object as Stripe.Subscription;
await db
.update(admins)
.set({
serversQuantity: newSubscription?.items?.data?.[0]?.quantity ?? 0,
})
.where(eq(admins.stripeCustomerId, newSubscription.customer as string));
const admin = await findAdminByStripeCustomerId( const admin = await findAdminByStripeCustomerId(
newSubscription.customer as string, newSubscription.customer as string,
@@ -136,8 +129,27 @@ export default async function handler(
return res.status(400).send("Webhook Error: Admin not found"); return res.status(400).send("Webhook Error: Admin not found");
} }
const newServersQuantity = admin.serversQuantity; if (newSubscription.status === "active") {
await updateServersBasedOnQuantity(admin.adminId, newServersQuantity); await db
.update(admins)
.set({
serversQuantity: newSubscription?.items?.data?.[0]?.quantity ?? 0,
})
.where(
eq(admins.stripeCustomerId, newSubscription.customer as string),
);
const newServersQuantity = admin.serversQuantity;
await updateServersBasedOnQuantity(admin.adminId, newServersQuantity);
} else {
await disableServers(admin.adminId);
await db
.update(admins)
.set({ serversQuantity: 0 })
.where(
eq(admins.stripeCustomerId, newSubscription.customer as string),
);
}
break; break;
} }
@@ -148,6 +160,13 @@ export default async function handler(
newInvoice.subscription as string, newInvoice.subscription as string,
); );
if (suscription.status !== "active") {
console.log(
`Skipping invoice.payment_succeeded for subscription ${suscription.id} with status ${suscription.status}`,
);
break;
}
await db await db
.update(admins) .update(admins)
.set({ .set({
@@ -168,22 +187,29 @@ export default async function handler(
} }
case "invoice.payment_failed": { case "invoice.payment_failed": {
const newInvoice = event.data.object as Stripe.Invoice; const newInvoice = event.data.object as Stripe.Invoice;
await db
.update(admins)
.set({
serversQuantity: 0,
})
.where(eq(admins.stripeCustomerId, newInvoice.customer as string));
const admin = await findAdminByStripeCustomerId( const subscription = await stripe.subscriptions.retrieve(
newInvoice.customer as string, newInvoice.subscription as string,
); );
if (!admin) { if (subscription.status !== "active") {
return res.status(400).send("Webhook Error: Admin not found"); const admin = await findAdminByStripeCustomerId(
newInvoice.customer as string,
);
if (!admin) {
return res.status(400).send("Webhook Error: Admin not found");
}
await db
.update(admins)
.set({
serversQuantity: 0,
})
.where(eq(admins.stripeCustomerId, newInvoice.customer as string));
await disableServers(admin.adminId);
} }
await disableServers(admin.adminId);
break; break;
} }