diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-07-01 22:51:59 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-07-04 16:27:29 +0000 |
| commit | 545cac1967f6882780021407a474690fea3f11ed (patch) | |
| tree | c30ea2cbc05d061e6726df97baae946f3d6db920 /packages/trpc/routers/bookmarks.ts | |
| parent | 73a0c951375d38d84cb1eaf5253b558c35882288 (diff) | |
| download | karakeep-545cac1967f6882780021407a474690fea3f11ed.tar.zst | |
feat: Add per user bookmark count quota
Diffstat (limited to 'packages/trpc/routers/bookmarks.ts')
| -rw-r--r-- | packages/trpc/routers/bookmarks.ts | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index 2a02a0cd..f1fe10d7 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -1,5 +1,5 @@ import { experimental_trpcMiddleware, TRPCError } from "@trpc/server"; -import { and, eq, gt, inArray, lt, or } from "drizzle-orm"; +import { and, count, eq, gt, inArray, lt, or } from "drizzle-orm"; import invariant from "tiny-invariant"; import { z } from "zod"; @@ -19,6 +19,7 @@ import { bookmarkTexts, customPrompts, tagsOnBookmarks, + users, } from "@karakeep/db/schema"; import { deleteAsset, @@ -267,6 +268,28 @@ export const bookmarksAppRouter = router({ return { ...alreadyExists, alreadyExists: true }; } } + + // Check user quota + const user = await ctx.db.query.users.findFirst({ + where: eq(users.id, ctx.user.id), + columns: { + bookmarkQuota: true, + }, + }); + + if (user?.bookmarkQuota !== null && user?.bookmarkQuota !== undefined) { + const currentBookmarkCount = await ctx.db + .select({ count: count() }) + .from(bookmarks) + .where(eq(bookmarks.userId, ctx.user.id)); + + if (currentBookmarkCount[0].count >= user.bookmarkQuota) { + throw new TRPCError({ + code: "FORBIDDEN", + message: `Bookmark quota exceeded. You can only have ${user.bookmarkQuota} bookmarks.`, + }); + } + } const bookmark = await ctx.db.transaction(async (tx) => { const bookmark = ( await tx |
