aboutsummaryrefslogtreecommitdiffstats
path: root/packages/open-api
diff options
context:
space:
mode:
authorxuatz <xzlow10@gmail.com>2025-05-19 00:18:58 +0900
committerGitHub <noreply@github.com>2025-05-18 16:18:58 +0100
commit4e06ea7bdbaaa196da5c3e2a755aeefb25cf4228 (patch)
tree1f9aab52078eaa485430cfc6e514c655da122ea5 /packages/open-api
parent70d572096706cb2d7f5d3f29b51e6ba1d86578c6 (diff)
downloadkarakeep-4e06ea7bdbaaa196da5c3e2a755aeefb25cf4228.tar.zst
feat(api): enable ?sortOrder= for relevant resources (#1398)
* feat(api): enable `?sortOrder=` for relevant resources * fix tests
Diffstat (limited to 'packages/open-api')
-rw-r--r--packages/open-api/karakeep-openapi-spec.json61
-rw-r--r--packages/open-api/lib/bookmarks.ts6
-rw-r--r--packages/open-api/lib/lists.ts15
-rw-r--r--packages/open-api/lib/tags.ts15
-rw-r--r--packages/open-api/package.json1
-rw-r--r--packages/open-api/tsconfig.json2
6 files changed, 89 insertions, 11 deletions
diff --git a/packages/open-api/karakeep-openapi-spec.json b/packages/open-api/karakeep-openapi-spec.json
index 3bdaed54..dbc2e5d0 100644
--- a/packages/open-api/karakeep-openapi-spec.json
+++ b/packages/open-api/karakeep-openapi-spec.json
@@ -551,6 +551,19 @@
},
{
"schema": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "default": "desc"
+ },
+ "required": false,
+ "name": "sortOrder",
+ "in": "query"
+ },
+ {
+ "schema": {
"type": "number"
},
"required": false,
@@ -776,6 +789,20 @@
},
{
"schema": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc",
+ "relevance"
+ ],
+ "default": "relevance"
+ },
+ "required": false,
+ "name": "sortOrder",
+ "in": "query"
+ },
+ {
+ "schema": {
"type": "number"
},
"required": false,
@@ -1969,8 +1996,8 @@
},
"/lists/{listId}/bookmarks": {
"get": {
- "description": "Get the bookmarks in a list",
- "summary": "Get a bookmarks in a list",
+ "description": "Get bookmarks in the list",
+ "summary": "Get bookmarks in the list",
"tags": [
"Lists"
],
@@ -1985,6 +2012,19 @@
},
{
"schema": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "default": "desc"
+ },
+ "required": false,
+ "name": "sortOrder",
+ "in": "query"
+ },
+ {
+ "schema": {
"type": "number"
},
"required": false,
@@ -2367,8 +2407,8 @@
},
"/tags/{tagId}/bookmarks": {
"get": {
- "description": "Get the bookmarks with the tag",
- "summary": "Get a bookmarks with the tag",
+ "description": "Get bookmarks with the tag",
+ "summary": "Get bookmarks with the tag",
"tags": [
"Tags"
],
@@ -2383,6 +2423,19 @@
},
{
"schema": {
+ "type": "string",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "default": "desc"
+ },
+ "required": false,
+ "name": "sortOrder",
+ "in": "query"
+ },
+ {
+ "schema": {
"type": "number"
},
"required": false,
diff --git a/packages/open-api/lib/bookmarks.ts b/packages/open-api/lib/bookmarks.ts
index e344d656..8fb0eb8c 100644
--- a/packages/open-api/lib/bookmarks.ts
+++ b/packages/open-api/lib/bookmarks.ts
@@ -9,6 +9,7 @@ import {
zBareBookmarkSchema,
zManipulatedTagSchema,
zNewBookmarkRequestSchema,
+ zSortOrder,
zUpdateBookmarksRequestSchema,
} from "@karakeep/shared/types/bookmarks";
@@ -60,6 +61,10 @@ registry.registerPath({
.object({
archived: z.boolean().optional(),
favourited: z.boolean().optional(),
+ sortOrder: zSortOrder
+ .exclude(["relevance"])
+ .optional()
+ .default(zSortOrder.Enum.desc),
})
.merge(PaginationSchema)
.merge(IncludeContentSearchParamSchema),
@@ -87,6 +92,7 @@ registry.registerPath({
query: z
.object({
q: z.string(),
+ sortOrder: zSortOrder.optional().default(zSortOrder.Enum.relevance),
})
.merge(PaginationSchema)
.merge(IncludeContentSearchParamSchema),
diff --git a/packages/open-api/lib/lists.ts b/packages/open-api/lib/lists.ts
index ab07e425..992b96c4 100644
--- a/packages/open-api/lib/lists.ts
+++ b/packages/open-api/lib/lists.ts
@@ -4,6 +4,7 @@ import {
} from "@asteasolutions/zod-to-openapi";
import { z } from "zod";
+import { zSortOrder } from "@karakeep/shared/types/bookmarks";
import {
zBookmarkListSchema,
zEditBookmarkListSchema,
@@ -190,13 +191,21 @@ registry.registerPath({
registry.registerPath({
method: "get",
path: "/lists/{listId}/bookmarks",
- description: "Get the bookmarks in a list",
- summary: "Get a bookmarks in a list",
+ description: "Get bookmarks in the list",
+ summary: "Get bookmarks in the list",
tags: ["Lists"],
security: [{ [BearerAuth.name]: [] }],
request: {
params: z.object({ listId: ListIdSchema }),
- query: PaginationSchema.merge(IncludeContentSearchParamSchema),
+ query: z
+ .object({
+ sortOrder: zSortOrder
+ .exclude(["relevance"])
+ .optional()
+ .default(zSortOrder.Enum.desc),
+ })
+ .merge(PaginationSchema)
+ .merge(IncludeContentSearchParamSchema),
},
responses: {
200: {
diff --git a/packages/open-api/lib/tags.ts b/packages/open-api/lib/tags.ts
index c51e3b84..b8136741 100644
--- a/packages/open-api/lib/tags.ts
+++ b/packages/open-api/lib/tags.ts
@@ -4,6 +4,7 @@ import {
} from "@asteasolutions/zod-to-openapi";
import { z } from "zod";
+import { zSortOrder } from "@karakeep/shared/types/bookmarks";
import {
zGetTagResponseSchema,
zUpdateTagRequestSchema,
@@ -152,13 +153,21 @@ registry.registerPath({
registry.registerPath({
method: "get",
path: "/tags/{tagId}/bookmarks",
- description: "Get the bookmarks with the tag",
- summary: "Get a bookmarks with the tag",
+ description: "Get bookmarks with the tag",
+ summary: "Get bookmarks with the tag",
tags: ["Tags"],
security: [{ [BearerAuth.name]: [] }],
request: {
params: z.object({ tagId: TagIdSchema }),
- query: PaginationSchema.merge(IncludeContentSearchParamSchema),
+ query: z
+ .object({
+ sortOrder: zSortOrder
+ .exclude(["relevance"])
+ .optional()
+ .default(zSortOrder.Enum.desc),
+ })
+ .merge(PaginationSchema)
+ .merge(IncludeContentSearchParamSchema),
},
responses: {
200: {
diff --git a/packages/open-api/package.json b/packages/open-api/package.json
index dfbb0bb6..900af481 100644
--- a/packages/open-api/package.json
+++ b/packages/open-api/package.json
@@ -19,6 +19,7 @@
"typecheck": "tsc --noEmit",
"generate": "tsx index.ts",
"format": "prettier . --ignore-path ../../.prettierignore",
+ "format:fix": "prettier . --write --ignore-path ../../.prettierignore",
"lint": "eslint ."
},
"main": "index.ts",
diff --git a/packages/open-api/tsconfig.json b/packages/open-api/tsconfig.json
index d97c8ef4..a795b96a 100644
--- a/packages/open-api/tsconfig.json
+++ b/packages/open-api/tsconfig.json
@@ -5,5 +5,5 @@
"exclude": ["node_modules"],
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
- },
+ }
}