phase 1-6 implemented
This commit is contained in:
1 parent
22c274bb83
commit
2c4927478a
73 files changed
+9702
-2354
No files matched your search
@@ -4,6 +4,7 @@ import { WebhookEvent } from "@clerk/nextjs/server";
|
||||
import { NextResponse } from "next/server";
|
||||
import Database from "better-sqlite3";
|
||||
import path from "path";
|
||||
import log from "@/lib/logger";
|
||||
|
||||
export async function POST(req: Request) {
|
||||
// Get the webhook secret from environment variables
|
||||
@@ -46,13 +47,16 @@ export async function POST(req: Request) {
|
||||
"svix-signature": svix_signature,
|
||||
}) as WebhookEvent;
|
||||
} catch (err) {
|
||||
console.error("Error verifying webhook:", err);
|
||||
log.error("Webhook verification failed", err);
|
||||
return NextResponse.json({ error: "Verification failed" }, { status: 400 });
|
||||
}
|
||||
|
||||
// Handle the webhook
|
||||
const eventType = evt.type;
|
||||
console.log(`Received webhook with ID ${evt.data.id} and type ${eventType}`);
|
||||
log.info("Received webhook event", {
|
||||
userId: evt.data.id,
|
||||
eventType,
|
||||
});
|
||||
|
||||
try {
|
||||
// Connect to database directly for webhook operations
|
||||
@@ -70,7 +74,13 @@ export async function POST(req: Request) {
|
||||
);
|
||||
|
||||
if (!primaryEmail?.email_address) {
|
||||
console.error("No primary email found for user:", id);
|
||||
log.error(
|
||||
"No primary email found for user (user.created)",
|
||||
undefined,
|
||||
{
|
||||
userId: id,
|
||||
},
|
||||
);
|
||||
db.close();
|
||||
return NextResponse.json(
|
||||
{ error: "No primary email" },
|
||||
@@ -161,9 +171,11 @@ export async function POST(req: Request) {
|
||||
}
|
||||
}
|
||||
|
||||
console.log(
|
||||
`✅ User ${id} created in database (role=${role}, gymId=${gymId ?? "null"})`,
|
||||
);
|
||||
log.info("User created in database", {
|
||||
userId: id,
|
||||
role,
|
||||
gymId: gymId ?? null,
|
||||
});
|
||||
db.close();
|
||||
break;
|
||||
}
|
||||
@@ -178,7 +190,13 @@ export async function POST(req: Request) {
|
||||
);
|
||||
|
||||
if (!primaryEmail?.email_address) {
|
||||
console.error("No primary email found for user:", id);
|
||||
log.error(
|
||||
"No primary email found for user (user.updated)",
|
||||
undefined,
|
||||
{
|
||||
userId: id,
|
||||
},
|
||||
);
|
||||
db.close();
|
||||
return NextResponse.json(
|
||||
{ error: "No primary email" },
|
||||
@@ -236,7 +254,7 @@ export async function POST(req: Request) {
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ User ${id} updated in database`);
|
||||
log.info("User updated in database", { userId: id });
|
||||
db.close();
|
||||
break;
|
||||
}
|
||||
@@ -245,7 +263,7 @@ export async function POST(req: Request) {
|
||||
const { id } = evt.data;
|
||||
|
||||
if (!id) {
|
||||
console.error("No user ID provided for deletion");
|
||||
log.error("No user ID provided for deletion");
|
||||
db.close();
|
||||
return NextResponse.json({ error: "No user ID" }, { status: 400 });
|
||||
}
|
||||
@@ -254,13 +272,13 @@ export async function POST(req: Request) {
|
||||
const stmt = db.prepare("DELETE FROM users WHERE id = ?");
|
||||
stmt.run(id);
|
||||
|
||||
console.log(`✅ User ${id} deleted from database`);
|
||||
log.info("User deleted from database", { userId: id });
|
||||
db.close();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
console.log(`Unhandled webhook event type: ${eventType}`);
|
||||
log.debug("Unhandled webhook event type", { eventType });
|
||||
db.close();
|
||||
}
|
||||
|
||||
@@ -269,7 +287,7 @@ export async function POST(req: Request) {
|
||||
{ status: 200 },
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Error processing webhook:", error);
|
||||
log.error("Webhook processing failed", error);
|
||||
return NextResponse.json({ error: "Processing failed" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user