From 692685b1e725d10db1195e9d141eca79463e78d0 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Mon, 14 Aug 2023 12:46:27 -0600 Subject: [PATCH] Webhook updates --- src/pages/api/webhooks/onUserCreate.ts | 55 ++++++++++++++++++++++++++ src/pages/api/webhooks/onUserDelete.ts | 6 ++- 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/pages/api/webhooks/onUserCreate.ts diff --git a/src/pages/api/webhooks/onUserCreate.ts b/src/pages/api/webhooks/onUserCreate.ts new file mode 100644 index 0000000..3df9404 --- /dev/null +++ b/src/pages/api/webhooks/onUserCreate.ts @@ -0,0 +1,55 @@ +import type { NextApiRequest, NextApiResponse } from "next"; +import { env } from "~/env.mjs"; +import { validateRequest } from "~/server/unkey"; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + const success = await validateRequest(req, res); + + if (success) { + const requestBody = req.body as { + data: { + id: string; + email_addresses: [ + { + email_address: string; + id: string; + verification: { + status: string; + strategy: string; + }; + } + ]; + }; + object: string; + type: string; + }; + + const userUpdateResponse = await fetch( + `https://api.clerk.com/v1/users/${requestBody.data.id}/metadata`, + { + method: "PATCH", + headers: { + Authorization: `Bearer ${env.CLERK_SECRET_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + public_metadata: { + isVIP: false, + isAdmin: false, + }, + private_metadata: {}, + unsafe_metadata: {}, + }), + } + ); + + if (userUpdateResponse.status === 200) { + res.status(200).json({ result: "METADATA UPDATED" }); + } else { + res.status(500).json({ error: "ERROR UPDATING METADATA" }); + } + } +} diff --git a/src/pages/api/webhooks/onUserDelete.ts b/src/pages/api/webhooks/onUserDelete.ts index 85403ba..f549642 100644 --- a/src/pages/api/webhooks/onUserDelete.ts +++ b/src/pages/api/webhooks/onUserDelete.ts @@ -28,8 +28,10 @@ export default async function handler( if (deletedRoom.rowsAffected > 0) { await db.delete(logs).where(eq(logs.userId, requestBody.data.id)); await db.delete(votes).where(eq(votes.userId, requestBody.data.id)); - } - res.status(200).json({ result: "USER DELETED" }); + res.status(200).json({ result: "USER DELETED" }); + } else { + res.status(500).json({ result: "ERROR DELETING USER" }); + } } }