mirror of
https://github.com/ahmadk953/tasko.git
synced 2025-05-01 03:09:34 +00:00
Initial Commit
This commit is contained in:
commit
f3e2f01bd7
150 changed files with 13612 additions and 0 deletions
69
app/api/webhook/route.ts
Normal file
69
app/api/webhook/route.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
import Stripe from "stripe";
|
||||
import { headers } from "next/headers";
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
import { db } from "@/lib/db";
|
||||
import { stripe } from "@/lib/stripe";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const body = await req.text();
|
||||
const signature = headers().get("Stripe-Signature") as string;
|
||||
|
||||
let event: Stripe.Event;
|
||||
|
||||
try {
|
||||
event = stripe.webhooks.constructEvent(
|
||||
body,
|
||||
signature,
|
||||
process.env.STRIPE_WEBHOOK_SECRET!
|
||||
);
|
||||
} catch (error) {
|
||||
return new NextResponse(JSON.stringify(error), { status: 400 });
|
||||
}
|
||||
|
||||
const session = event.data.object as Stripe.Checkout.Session;
|
||||
|
||||
if (event.type === "checkout.session.completed") {
|
||||
const subscription = await stripe.subscriptions.retrieve(
|
||||
session.subscription as string
|
||||
);
|
||||
|
||||
if (!session?.metadata?.orgId) {
|
||||
return new NextResponse(JSON.stringify({ error: "Missing orgId" }), {
|
||||
status: 400,
|
||||
});
|
||||
}
|
||||
|
||||
await db.orgSubscription.create({
|
||||
data: {
|
||||
orgId: session.metadata.orgId,
|
||||
stripeSubscriptionId: subscription.id,
|
||||
stripeCustomerId: session.customer as string,
|
||||
stripePriceId: subscription.items.data[0].price.id,
|
||||
stripeCurrentPeriodEnd: new Date(
|
||||
subscription.current_period_end * 1000
|
||||
),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (event.type === "invoice.payment_succeeded") {
|
||||
const subscription = await stripe.subscriptions.retrieve(
|
||||
session.subscription as string
|
||||
);
|
||||
|
||||
await db.orgSubscription.update({
|
||||
where: {
|
||||
stripeSubscriptionId: subscription.id,
|
||||
},
|
||||
data: {
|
||||
stripePriceId: subscription.items.data[0].price.id,
|
||||
stripeCurrentPeriodEnd: new Date(
|
||||
subscription.current_period_end * 1000
|
||||
),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return NextResponse.json(null, { status: 200 });
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue