diff options
| author | MohamedBassem <me@mbassem.com> | 2024-03-20 23:51:28 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-03-20 23:51:28 +0000 |
| commit | d3d3ba9d4a37ac757b4b8e8e02feae384c95f0e9 (patch) | |
| tree | aab59e71c0c511c6b8ce0d916fd7fcd8071fea2b /packages/trpc/routers | |
| parent | d6d4e16b400e5ffa871e6c4f3d4a131e54240c70 (diff) | |
| download | karakeep-d3d3ba9d4a37ac757b4b8e8e02feae384c95f0e9.tar.zst | |
feature(web): Add support for removing items from lists
Diffstat (limited to 'packages/trpc/routers')
| -rw-r--r-- | packages/trpc/routers/bookmarks.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/routers/lists.ts | 31 |
2 files changed, 30 insertions, 3 deletions
diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts index cd3ab17c..3a49c7fa 100644 --- a/packages/trpc/routers/bookmarks.ts +++ b/packages/trpc/routers/bookmarks.ts @@ -35,7 +35,7 @@ import { } from "../types/bookmarks"; import { ZBookmarkTags } from "../types/tags"; -const ensureBookmarkOwnership = experimental_trpcMiddleware<{ +export const ensureBookmarkOwnership = experimental_trpcMiddleware<{ ctx: Context; input: { bookmarkId: string }; }>().create(async (opts) => { diff --git a/packages/trpc/routers/lists.ts b/packages/trpc/routers/lists.ts index cbce3970..db5bb38e 100644 --- a/packages/trpc/routers/lists.ts +++ b/packages/trpc/routers/lists.ts @@ -7,8 +7,9 @@ import { bookmarkLists, bookmarksInLists } from "@hoarder/db/schema"; import { authedProcedure, Context, router } from "../index"; import { zBookmarkListSchema } from "../types/lists"; +import { ensureBookmarkOwnership } from "./bookmarks"; -const ensureListOwnership = experimental_trpcMiddleware<{ +export const ensureListOwnership = experimental_trpcMiddleware<{ ctx: Context; input: { listId: string }; }>().create(async (opts) => { @@ -106,6 +107,7 @@ export const listsAppRouter = router({ }), ) .use(ensureListOwnership) + .use(ensureBookmarkOwnership) .mutation(async ({ input, ctx }) => { try { await ctx.db.insert(bookmarksInLists).values({ @@ -117,7 +119,7 @@ export const listsAppRouter = router({ if (e.code == "SQLITE_CONSTRAINT_PRIMARYKEY") { throw new TRPCError({ code: "BAD_REQUEST", - message: "Bookmark already in the list", + message: `Bookmark ${input.bookmarkId} is already in the list ${input.listId}`, }); } } @@ -127,6 +129,31 @@ export const listsAppRouter = router({ }); } }), + removeFromList: authedProcedure + .input( + z.object({ + listId: z.string(), + bookmarkId: z.string(), + }), + ) + .use(ensureListOwnership) + .use(ensureBookmarkOwnership) + .mutation(async ({ input, ctx }) => { + const deleted = await ctx.db + .delete(bookmarksInLists) + .where( + and( + eq(bookmarksInLists.listId, input.listId), + eq(bookmarksInLists.bookmarkId, input.bookmarkId), + ), + ); + if (deleted.changes == 0) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: `Bookmark ${input.bookmarkId} is already not in list ${input.listId}`, + }); + } + }), get: authedProcedure .input( z.object({ |
