2024-10-21 12:59:05 -05:00
|
|
|
import { prisma } from "../db";
|
2023-11-06 07:25:57 -06:00
|
|
|
import { Subscription, User } from "@prisma/client";
|
|
|
|
import checkSubscriptionByEmail from "./checkSubscriptionByEmail";
|
|
|
|
|
|
|
|
interface UserIncludingSubscription extends User {
|
|
|
|
subscriptions: Subscription | null;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default async function verifySubscription(
|
2024-10-21 12:59:05 -05:00
|
|
|
user?: UserIncludingSubscription | null
|
2023-11-06 07:25:57 -06:00
|
|
|
) {
|
2024-10-06 23:57:36 -05:00
|
|
|
if (!user || !user.subscriptions) {
|
2023-11-06 07:25:57 -06:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2024-10-06 23:57:36 -05:00
|
|
|
if (
|
|
|
|
!user.subscriptions.active ||
|
|
|
|
new Date() > user.subscriptions.currentPeriodEnd
|
|
|
|
) {
|
|
|
|
const subscription = await checkSubscriptionByEmail(user.email as string);
|
2023-11-06 07:25:57 -06:00
|
|
|
|
2024-10-06 23:57:36 -05:00
|
|
|
if (
|
|
|
|
!subscription ||
|
|
|
|
!subscription.stripeSubscriptionId ||
|
|
|
|
!subscription.currentPeriodEnd ||
|
|
|
|
!subscription.currentPeriodStart ||
|
|
|
|
!subscription.quantity
|
|
|
|
) {
|
|
|
|
return null;
|
|
|
|
}
|
2023-11-06 07:25:57 -06:00
|
|
|
|
|
|
|
const {
|
|
|
|
active,
|
|
|
|
stripeSubscriptionId,
|
|
|
|
currentPeriodStart,
|
|
|
|
currentPeriodEnd,
|
2024-10-06 23:57:36 -05:00
|
|
|
quantity,
|
|
|
|
} = subscription;
|
2023-11-06 07:25:57 -06:00
|
|
|
|
2024-10-06 23:57:36 -05:00
|
|
|
await prisma.subscription
|
|
|
|
.upsert({
|
2024-03-16 19:09:58 -05:00
|
|
|
where: {
|
|
|
|
userId: user.id,
|
|
|
|
},
|
2024-10-06 23:57:36 -05:00
|
|
|
create: {
|
|
|
|
active,
|
|
|
|
stripeSubscriptionId,
|
|
|
|
currentPeriodStart: new Date(currentPeriodStart),
|
|
|
|
currentPeriodEnd: new Date(currentPeriodEnd),
|
|
|
|
quantity,
|
|
|
|
userId: user.id,
|
|
|
|
},
|
|
|
|
update: {
|
|
|
|
active,
|
|
|
|
stripeSubscriptionId,
|
|
|
|
currentPeriodStart: new Date(currentPeriodStart),
|
|
|
|
currentPeriodEnd: new Date(currentPeriodEnd),
|
|
|
|
quantity,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
.catch((err) => console.log(err));
|
2023-11-06 07:25:57 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
return user;
|
|
|
|
}
|