diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-12-13 14:36:37 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-12-13 14:36:37 +0000 |
| commit | 74df8bd789ee2d56d0620e9852aa3eb7c48f0823 (patch) | |
| tree | da01c8de0736c0eb9a6662121014999cd23e99c7 /packages/trpc/models/webhooks.ts | |
| parent | 697c853a7dac003b9636eb73433658ad89ec113e (diff) | |
| download | karakeep-74df8bd789ee2d56d0620e9852aa3eb7c48f0823.tar.zst | |
feat: Add limits on number of rss feeds and webhooks per user
Diffstat (limited to 'packages/trpc/models/webhooks.ts')
| -rw-r--r-- | packages/trpc/models/webhooks.ts | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/packages/trpc/models/webhooks.ts b/packages/trpc/models/webhooks.ts index d2d9c19c..12281ec7 100644 --- a/packages/trpc/models/webhooks.ts +++ b/packages/trpc/models/webhooks.ts @@ -1,8 +1,9 @@ import { TRPCError } from "@trpc/server"; -import { and, eq } from "drizzle-orm"; +import { and, count, eq } from "drizzle-orm"; import { z } from "zod"; import { webhooksTable } from "@karakeep/db/schema"; +import serverConfig from "@karakeep/shared/config"; import { zNewWebhookSchema, zUpdateWebhookSchema, @@ -44,6 +45,20 @@ export class Webhook { ctx: AuthedContext, input: z.infer<typeof zNewWebhookSchema>, ): Promise<Webhook> { + // Check if user has reached the maximum number of webhooks + const [webhookCount] = await ctx.db + .select({ count: count() }) + .from(webhooksTable) + .where(eq(webhooksTable.userId, ctx.user.id)); + + const maxWebhooks = serverConfig.webhook.maxWebhooksPerUser; + if (webhookCount.count >= maxWebhooks) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: `Maximum number of webhooks (${maxWebhooks}) reached`, + }); + } + const [result] = await ctx.db .insert(webhooksTable) .values({ |
