diff options
| author | Mohamed Bassem <me@mbassem.com> | 2024-10-20 14:23:15 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2024-10-20 14:23:15 +0000 |
| commit | 62395ecbbfef38686073369443d99249421b2e22 (patch) | |
| tree | c6e721e6e9b1807b23e98bb1db51b3e13d8e3e30 | |
| parent | fb297eaadee9b741ddb6731a91eb4648020dcb3b (diff) | |
| download | karakeep-62395ecbbfef38686073369443d99249421b2e22.tar.zst | |
feature: Add GET REST APIs for bookmarks, lists and tags
| -rw-r--r-- | apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts | 18 | ||||
| -rw-r--r-- | apps/web/app/api/v1/lists/[listId]/route.ts | 33 | ||||
| -rw-r--r-- | apps/web/app/api/v1/lists/route.ts | 14 | ||||
| -rw-r--r-- | apps/web/app/api/v1/tags/[tagId]/route.ts | 33 | ||||
| -rw-r--r-- | apps/web/app/api/v1/tags/route.ts | 14 |
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 }; + }, + }); |
