aboutsummaryrefslogtreecommitdiffstats
path: root/packages/trpc
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-03-20 23:51:28 +0000
committerMohamedBassem <me@mbassem.com>2024-03-20 23:51:28 +0000
commitd3d3ba9d4a37ac757b4b8e8e02feae384c95f0e9 (patch)
treeaab59e71c0c511c6b8ce0d916fd7fcd8071fea2b /packages/trpc
parentd6d4e16b400e5ffa871e6c4f3d4a131e54240c70 (diff)
downloadkarakeep-d3d3ba9d4a37ac757b4b8e8e02feae384c95f0e9.tar.zst
feature(web): Add support for removing items from lists
Diffstat (limited to 'packages/trpc')
-rw-r--r--packages/trpc/routers/bookmarks.ts2
-rw-r--r--packages/trpc/routers/lists.ts31
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({