diff options
| author | xuatz <xzlow10@gmail.com> | 2025-05-19 00:18:58 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-18 16:18:58 +0100 |
| commit | 4e06ea7bdbaaa196da5c3e2a755aeefb25cf4228 (patch) | |
| tree | 1f9aab52078eaa485430cfc6e514c655da122ea5 /apps | |
| parent | 70d572096706cb2d7f5d3f29b51e6ba1d86578c6 (diff) | |
| download | karakeep-4e06ea7bdbaaa196da5c3e2a755aeefb25cf4228.tar.zst | |
feat(api): enable ?sortOrder= for relevant resources (#1398)
* feat(api): enable `?sortOrder=` for relevant resources
* fix tests
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts | 4 | ||||
| -rw-r--r-- | apps/web/app/api/v1/bookmarks/route.ts | 9 | ||||
| -rw-r--r-- | apps/web/app/api/v1/bookmarks/search/route.ts | 1 | ||||
| -rw-r--r-- | apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts | 4 | ||||
| -rw-r--r-- | apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts | 5 | ||||
| -rw-r--r-- | apps/web/app/api/v1/utils/types.ts | 12 |
6 files changed, 28 insertions, 7 deletions
diff --git a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts index fa551894..9ad18fd3 100644 --- a/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts +++ b/apps/web/app/api/v1/bookmarks/[bookmarkId]/route.ts @@ -3,7 +3,7 @@ import { buildHandler } from "@/app/api/v1/utils/handler"; import { zUpdateBookmarksRequestSchema } from "@karakeep/shared/types/bookmarks"; -import { zGetBookmarkSearchParamsSchema } from "../../utils/types"; +import { zGetBookmarkQueryParamsSchema } from "../../utils/types"; export const dynamic = "force-dynamic"; @@ -13,7 +13,7 @@ export const GET = ( ) => buildHandler({ req, - searchParamsSchema: zGetBookmarkSearchParamsSchema, + searchParamsSchema: zGetBookmarkQueryParamsSchema, handler: async ({ api, searchParams }) => { const bookmark = await api.bookmarks.getBookmark({ bookmarkId: params.bookmarkId, diff --git a/apps/web/app/api/v1/bookmarks/route.ts b/apps/web/app/api/v1/bookmarks/route.ts index 1605d2b5..4df4f6ad 100644 --- a/apps/web/app/api/v1/bookmarks/route.ts +++ b/apps/web/app/api/v1/bookmarks/route.ts @@ -1,7 +1,10 @@ import { NextRequest } from "next/server"; import { z } from "zod"; -import { zNewBookmarkRequestSchema } from "@karakeep/shared/types/bookmarks"; +import { + zNewBookmarkRequestSchema, + zSortOrder, +} from "@karakeep/shared/types/bookmarks"; import { buildHandler } from "../utils/handler"; import { adaptPagination, zPagination } from "../utils/pagination"; @@ -16,6 +19,10 @@ export const GET = (req: NextRequest) => .object({ favourited: zStringBool.optional(), archived: zStringBool.optional(), + sortOrder: zSortOrder + .exclude([zSortOrder.Enum.relevance]) + .optional() + .default(zSortOrder.Enum.desc), // TODO: Change the default to false in a couple of releases. includeContent: zStringBool.optional().default("true"), }) diff --git a/apps/web/app/api/v1/bookmarks/search/route.ts b/apps/web/app/api/v1/bookmarks/search/route.ts index 52081c7f..e85c7954 100644 --- a/apps/web/app/api/v1/bookmarks/search/route.ts +++ b/apps/web/app/api/v1/bookmarks/search/route.ts @@ -27,6 +27,7 @@ export const GET = (req: NextRequest) => const bookmarks = await api.bookmarks.searchBookmarks({ text: searchParams.q, cursor: searchParams.cursor, + sortOrder: searchParams.sortOrder, limit: searchParams.limit, includeContent: searchParams.includeContent, }); diff --git a/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts b/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts index 3977413a..daf78449 100644 --- a/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts +++ b/apps/web/app/api/v1/lists/[listId]/bookmarks/route.ts @@ -1,14 +1,14 @@ import { NextRequest } from "next/server"; import { buildHandler } from "@/app/api/v1/utils/handler"; import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination"; -import { zGetBookmarkSearchParamsSchema } from "@/app/api/v1/utils/types"; +import { zGetBookmarkQueryParamsSchema } from "@/app/api/v1/utils/types"; export const dynamic = "force-dynamic"; export const GET = (req: NextRequest, params: { params: { listId: string } }) => buildHandler({ req, - searchParamsSchema: zPagination.and(zGetBookmarkSearchParamsSchema), + searchParamsSchema: zPagination.and(zGetBookmarkQueryParamsSchema), handler: async ({ api, searchParams }) => { const bookmarks = await api.bookmarks.getBookmarks({ listId: params.params.listId, diff --git a/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts b/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts index cfc0af51..aaa5087b 100644 --- a/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts +++ b/apps/web/app/api/v1/tags/[tagId]/bookmarks/route.ts @@ -1,7 +1,7 @@ import { NextRequest } from "next/server"; import { buildHandler } from "@/app/api/v1/utils/handler"; import { adaptPagination, zPagination } from "@/app/api/v1/utils/pagination"; -import { zGetBookmarkSearchParamsSchema } from "@/app/api/v1/utils/types"; +import { zGetBookmarkQueryParamsSchema } from "@/app/api/v1/utils/types"; export const dynamic = "force-dynamic"; @@ -11,10 +11,11 @@ export const GET = ( ) => buildHandler({ req, - searchParamsSchema: zPagination.and(zGetBookmarkSearchParamsSchema), + searchParamsSchema: zPagination.and(zGetBookmarkQueryParamsSchema), handler: async ({ api, searchParams }) => { const bookmarks = await api.bookmarks.getBookmarks({ tagId: params.tagId, + sortOrder: searchParams.sortOrder, limit: searchParams.limit, cursor: searchParams.cursor, }); diff --git a/apps/web/app/api/v1/utils/types.ts b/apps/web/app/api/v1/utils/types.ts index f0fe6231..bf181ce4 100644 --- a/apps/web/app/api/v1/utils/types.ts +++ b/apps/web/app/api/v1/utils/types.ts @@ -1,11 +1,23 @@ import { z } from "zod"; +import { zSortOrder } from "@karakeep/shared/types/bookmarks"; + export const zStringBool = z .string() .refine((val) => val === "true" || val === "false", "Must be true or false") .transform((val) => val === "true"); +export const zGetBookmarkQueryParamsSchema = z.object({ + sortOrder: zSortOrder + .exclude([zSortOrder.Enum.relevance]) + .optional() + .default(zSortOrder.Enum.desc), + // TODO: Change the default to false in a couple of releases. + includeContent: zStringBool.optional().default("true"), +}); + export const zGetBookmarkSearchParamsSchema = z.object({ + sortOrder: zSortOrder.optional().default(zSortOrder.Enum.relevance), // TODO: Change the default to false in a couple of releases. includeContent: zStringBool.optional().default("true"), }); |
