aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-01-04 14:03:42 +0000
committerMohamed Bassem <me@mbassem.com>2025-01-04 14:03:42 +0000
commit4439c91f426a8c8a13c4a84c8cb685ae67cc07e6 (patch)
tree5704485d5ac6db9ae6900a0e0371a74736bff93c /apps
parenteb0d82159060ff8c278172d01725076a9eef30c0 (diff)
downloadkarakeep-4439c91f426a8c8a13c4a84c8cb685ae67cc07e6.tar.zst
feat: Expose asset manipulation endpoints in the REST API
Diffstat (limited to 'apps')
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts37
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts36
2 files changed, 73 insertions, 0 deletions
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts
new file mode 100644
index 00000000..3fc50801
--- /dev/null
+++ b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/[assetId]/route.ts
@@ -0,0 +1,37 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+import { z } from "zod";
+
+export const dynamic = "force-dynamic";
+
+export const PUT = (
+ req: NextRequest,
+ params: { params: { bookmarkId: string; assetId: string } },
+) =>
+ buildHandler({
+ req,
+ bodySchema: z.object({ assetId: z.string() }),
+ handler: async ({ api, body }) => {
+ await api.bookmarks.replaceAsset({
+ bookmarkId: params.params.bookmarkId,
+ oldAssetId: params.params.assetId,
+ newAssetId: body!.assetId,
+ });
+ return { status: 204 };
+ },
+ });
+
+export const DELETE = (
+ req: NextRequest,
+ params: { params: { bookmarkId: string; assetId: string } },
+) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ await api.bookmarks.detachAsset({
+ bookmarkId: params.params.bookmarkId,
+ assetId: params.params.assetId,
+ });
+ return { status: 204 };
+ },
+ });
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts
new file mode 100644
index 00000000..e5284a39
--- /dev/null
+++ b/apps/web/app/api/v1/bookmarks/[bookmarkId]/assets/route.ts
@@ -0,0 +1,36 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+
+import { zAssetSchema } from "@hoarder/shared/types/bookmarks";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (
+ req: NextRequest,
+ params: { params: { bookmarkId: string } },
+) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const resp = await api.bookmarks.getBookmark({
+ bookmarkId: params.params.bookmarkId,
+ });
+ return { status: 200, resp: { assets: resp.assets } };
+ },
+ });
+
+export const POST = (
+ req: NextRequest,
+ params: { params: { bookmarkId: string } },
+) =>
+ buildHandler({
+ req,
+ bodySchema: zAssetSchema,
+ handler: async ({ api, body }) => {
+ const asset = await api.bookmarks.attachAsset({
+ bookmarkId: params.params.bookmarkId,
+ asset: body!,
+ });
+ return { status: 201, resp: asset };
+ },
+ });