bug fixed

This commit is contained in:
daniel31x13 2024-10-07 00:57:36 -04:00
parent d042c82cb0
commit f68582e28c
3 changed files with 50 additions and 104 deletions

View File

@ -1,22 +1,9 @@
import Stripe from "stripe"; import Stripe from "stripe";
const MONTHLY_PRICE_ID = process.env.MONTHLY_PRICE_ID;
const YEARLY_PRICE_ID = process.env.YEARLY_PRICE_ID;
const STRIPE_SECRET_KEY = process.env.STRIPE_SECRET_KEY; const STRIPE_SECRET_KEY = process.env.STRIPE_SECRET_KEY;
export default async function checkSubscriptionByEmail(email: string) { export default async function checkSubscriptionByEmail(email: string) {
let active: boolean | undefined, if (!STRIPE_SECRET_KEY) return null;
stripeSubscriptionId: string | undefined,
currentPeriodStart: number | undefined,
currentPeriodEnd: number | undefined;
if (!STRIPE_SECRET_KEY)
return {
active,
stripeSubscriptionId,
currentPeriodStart,
currentPeriodEnd,
};
const stripe = new Stripe(STRIPE_SECRET_KEY, { const stripe = new Stripe(STRIPE_SECRET_KEY, {
apiVersion: "2022-11-15", apiVersion: "2022-11-15",
@ -28,26 +15,17 @@ export default async function checkSubscriptionByEmail(email: string) {
expand: ["data.subscriptions"], expand: ["data.subscriptions"],
}); });
listByEmail.data.some((customer) => { if (listByEmail?.data[0]?.subscriptions?.data[0]) {
customer.subscriptions?.data.some((subscription) => {
subscription.current_period_end;
active =
subscription.items.data.some(
(e) =>
(e.price.id === MONTHLY_PRICE_ID && e.price.active === true) ||
(e.price.id === YEARLY_PRICE_ID && e.price.active === true)
) || false;
stripeSubscriptionId = subscription.id;
currentPeriodStart = subscription.current_period_start * 1000;
currentPeriodEnd = subscription.current_period_end * 1000;
});
});
return { return {
active: active || false, active: (listByEmail.data[0].subscriptions?.data[0] as any).plan.active,
stripeSubscriptionId, stripeSubscriptionId: listByEmail.data[0].subscriptions?.data[0].id,
currentPeriodStart, currentPeriodStart:
currentPeriodEnd, listByEmail.data[0].subscriptions?.data[0].current_period_start * 1000,
currentPeriodEnd:
listByEmail.data[0].subscriptions?.data[0].current_period_end * 1000,
quantity: (listByEmail?.data[0]?.subscriptions?.data[0] as any).quantity,
}; };
} else {
return null;
}
} }

View File

@ -9,28 +9,34 @@ interface UserIncludingSubscription extends User {
export default async function verifySubscription( export default async function verifySubscription(
user?: UserIncludingSubscription user?: UserIncludingSubscription
) { ) {
if (!user) { if (!user || !user.subscriptions) {
return null; return null;
} }
const subscription = user.subscriptions; if (
!user.subscriptions.active ||
new Date() > user.subscriptions.currentPeriodEnd
) {
const subscription = await checkSubscriptionByEmail(user.email as string);
const currentDate = new Date(); if (
!subscription ||
!subscription.stripeSubscriptionId ||
!subscription.currentPeriodEnd ||
!subscription.currentPeriodStart ||
!subscription.quantity
) {
return null;
}
if (!subscription?.active || currentDate > subscription.currentPeriodEnd) {
const { const {
active, active,
stripeSubscriptionId, stripeSubscriptionId,
currentPeriodStart, currentPeriodStart,
currentPeriodEnd, currentPeriodEnd,
} = await checkSubscriptionByEmail(user.email as string); quantity,
} = subscription;
if (
active &&
stripeSubscriptionId &&
currentPeriodStart &&
currentPeriodEnd
) {
await prisma.subscription await prisma.subscription
.upsert({ .upsert({
where: { where: {
@ -41,6 +47,7 @@ export default async function verifySubscription(
stripeSubscriptionId, stripeSubscriptionId,
currentPeriodStart: new Date(currentPeriodStart), currentPeriodStart: new Date(currentPeriodStart),
currentPeriodEnd: new Date(currentPeriodEnd), currentPeriodEnd: new Date(currentPeriodEnd),
quantity,
userId: user.id, userId: user.id,
}, },
update: { update: {
@ -48,25 +55,10 @@ export default async function verifySubscription(
stripeSubscriptionId, stripeSubscriptionId,
currentPeriodStart: new Date(currentPeriodStart), currentPeriodStart: new Date(currentPeriodStart),
currentPeriodEnd: new Date(currentPeriodEnd), currentPeriodEnd: new Date(currentPeriodEnd),
quantity,
}, },
}) })
.catch((err) => console.log(err)); .catch((err) => console.log(err));
} else if (!active) {
const subscription = await prisma.subscription.findFirst({
where: {
userId: user.id,
},
});
if (subscription)
await prisma.subscription.delete({
where: {
userId: user.id,
},
});
return null;
}
} }
return user; return user;

View File

@ -59,30 +59,6 @@ export default async function webhook(
return res.status(400).send("Webhook signature verification failed."); return res.status(400).send("Webhook signature verification failed.");
} }
// switch (event.type) {
// case "invoice.payment_succeeded":
// console.log(
// `Payment for ${event.data.object.customer_email} was successful!`
// );
// await handleCreateSubscription(event.data.object);
// break;
// case "customer.subscription.updated":
// console.log(
// `Subscription for ${event.data.object.customer_email} was updated.`
// );
// await handleUpdateSubscription(event.data.object);
// break;
// case "customer.subscription.deleted":
// console.log(
// `Subscription for ${event.data.object.customer_email} was deleted.`
// );
// await handleDeleteSubscription(event.data.object);
// break;
// default:
// // Unexpected event type
// console.log(`Unhandled event type ${event.type}.`);
// }
// Handle the event based on its type // Handle the event based on its type
const eventType = event.type; const eventType = event.type;
const data = event.data.object; const data = event.data.object;