44 lines
1.3 KiB
TypeScript

import { env } from "@/env";
import { db } from "@/server/db";
import { users } from "@/server/db/schema";
import { verifyWebhook } from "@clerk/nextjs/webhooks";
import { eq } from "drizzle-orm";
export async function POST(req: Request) {
try {
const evt = await verifyWebhook(req, {
signingSecret: env.CLERK_WEBHOOK_SIGNING_SECRET,
});
const eventType = evt.type;
switch (eventType) {
case "user.created":
await db.insert(users).values({
id: evt.data.id,
name: evt.data.first_name ?? evt.data.last_name,
image: evt.data.image_url,
});
break;
case "user.updated":
await db
.update(users)
.set({
name: evt.data.first_name ?? evt.data.last_name,
image: evt.data.image_url,
})
.where(eq(users.id, evt.data.id));
break;
case "user.deleted":
await db.delete(users).where(eq(users.id, evt.data.id!));
break;
default:
console.log("Unknown event type:", eventType);
break;
}
return new Response("Webhook received", { status: 200 });
} catch (err) {
console.error("Error verifying webhook:", err);
return new Response("Error verifying webhook", { status: 400 });
}
}