aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app/api
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-10-20 14:23:15 +0000
committerMohamed Bassem <me@mbassem.com>2024-10-20 14:23:15 +0000
commit62395ecbbfef38686073369443d99249421b2e22 (patch)
treec6e721e6e9b1807b23e98bb1db51b3e13d8e3e30 /apps/web/app/api
parentfb297eaadee9b741ddb6731a91eb4648020dcb3b (diff)
downloadkarakeep-62395ecbbfef38686073369443d99249421b2e22.tar.zst
feature: Add GET REST APIs for bookmarks, lists and tags
Diffstat (limited to 'apps/web/app/api')
-rw-r--r--apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts18
-rw-r--r--apps/web/app/api/v1/lists/[listId]/route.ts33
-rw-r--r--apps/web/app/api/v1/lists/route.ts14
-rw-r--r--apps/web/app/api/v1/tags/[tagId]/route.ts33
-rw-r--r--apps/web/app/api/v1/tags/route.ts14
5 files changed, 112 insertions, 0 deletions
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts
new file mode 100644
index 00000000..af4c0792
--- /dev/null
+++ b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts
@@ -0,0 +1,18 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (
+ req: NextRequest,
+ { params }: { params: { bookmarkId: string } },
+) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const bookmark = await api.bookmarks.getBookmark({
+ bookmarkId: params.bookmarkId,
+ });
+ return { status: 200, resp: bookmark };
+ },
+ });
diff --git a/apps/web/app/api/v1/lists/[listId]/route.ts b/apps/web/app/api/v1/lists/[listId]/route.ts
new file mode 100644
index 00000000..205a779f
--- /dev/null
+++ b/apps/web/app/api/v1/lists/[listId]/route.ts
@@ -0,0 +1,33 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (
+ req: NextRequest,
+ { params }: { params: { listId: string } },
+) =>
+ buildHandler({
+ req,
+ searchParamsSchema: zPagination,
+ handler: async ({ api, searchParams }) => {
+ const [list, bookmarks] = await Promise.all([
+ api.lists.get({
+ listId: params.listId,
+ }),
+ api.bookmarks.getBookmarks({
+ listId: params.listId,
+ limit: searchParams.limit,
+ cursor: searchParams.cursor,
+ }),
+ ]);
+ return {
+ status: 200,
+ resp: {
+ ...list,
+ ...adaptPagination(bookmarks),
+ },
+ };
+ },
+ });
diff --git a/apps/web/app/api/v1/lists/route.ts b/apps/web/app/api/v1/lists/route.ts
new file mode 100644
index 00000000..f2816219
--- /dev/null
+++ b/apps/web/app/api/v1/lists/route.ts
@@ -0,0 +1,14 @@
+import { NextRequest } from "next/server";
+
+import { buildHandler } from "../utils/handler";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (req: NextRequest) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const lists = await api.lists.list();
+ return { status: 200, resp: lists };
+ },
+ });
diff --git a/apps/web/app/api/v1/tags/[tagId]/route.ts b/apps/web/app/api/v1/tags/[tagId]/route.ts
new file mode 100644
index 00000000..9c9d15fd
--- /dev/null
+++ b/apps/web/app/api/v1/tags/[tagId]/route.ts
@@ -0,0 +1,33 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (
+ req: NextRequest,
+ { params }: { params: { tagId: string } },
+) =>
+ buildHandler({
+ req,
+ searchParamsSchema: zPagination,
+ handler: async ({ api, searchParams }) => {
+ const [tag, bookmarks] = await Promise.all([
+ api.tags.get({
+ tagId: params.tagId,
+ }),
+ api.bookmarks.getBookmarks({
+ tagId: params.tagId,
+ limit: searchParams.limit,
+ cursor: searchParams.cursor,
+ }),
+ ]);
+ return {
+ status: 200,
+ resp: {
+ ...tag,
+ ...adaptPagination(bookmarks),
+ },
+ };
+ },
+ });
diff --git a/apps/web/app/api/v1/tags/route.ts b/apps/web/app/api/v1/tags/route.ts
new file mode 100644
index 00000000..9625820c
--- /dev/null
+++ b/apps/web/app/api/v1/tags/route.ts
@@ -0,0 +1,14 @@
+import { NextRequest } from "next/server";
+
+import { buildHandler } from "../utils/handler";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (req: NextRequest) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const tags = await api.tags.list();
+ return { status: 200, resp: tags };
+ },
+ });