aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/lib
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-09 16:47:17 +0000
committerMohamedBassem <me@mbassem.com>2024-02-09 16:51:24 +0000
commit7400914396eea0c9a1fb7bc59e022babc2186f42 (patch)
tree36e4a3d05b43d15254d75fddebc0594747b70a91 /packages/web/lib
parent5c0fd0143e5ded1d8e957ec5e59e21d7c629d036 (diff)
downloadkarakeep-7400914396eea0c9a1fb7bc59e022babc2186f42.tar.zst
[feature] Add the ability to favourite and archive bookmarks
Diffstat (limited to 'packages/web/lib')
-rw-r--r--packages/web/lib/api.ts9
-rw-r--r--packages/web/lib/services/bookmarks.ts17
-rw-r--r--packages/web/lib/types/api/bookmarks.ts12
3 files changed, 36 insertions, 2 deletions
diff --git a/packages/web/lib/api.ts b/packages/web/lib/api.ts
index f7942310..3978dcb6 100644
--- a/packages/web/lib/api.ts
+++ b/packages/web/lib/api.ts
@@ -3,6 +3,8 @@
import { ZodTypeAny, z } from "zod";
import {
ZNewBookmarkRequest,
+ ZUpdateBookmarksRequest,
+ zBookmarkSchema,
zGetBookmarksResponseSchema,
} from "./types/api/bookmarks";
@@ -79,4 +81,11 @@ export default class APIClient {
method: "DELETE",
});
}
+
+ static async updateBookmark(id: string, update: ZUpdateBookmarksRequest) {
+ return await doRequest(`/bookmarks/${id}`, zBookmarkSchema, {
+ method: "PATCH",
+ body: JSON.stringify(update),
+ });
+ }
}
diff --git a/packages/web/lib/services/bookmarks.ts b/packages/web/lib/services/bookmarks.ts
index 3231e4d3..7cb473f9 100644
--- a/packages/web/lib/services/bookmarks.ts
+++ b/packages/web/lib/services/bookmarks.ts
@@ -4,6 +4,7 @@ import {
ZBookmark,
ZBookmarkContent,
ZGetBookmarksRequest,
+ ZUpdateBookmarksRequest,
} from "@/lib/types/api/bookmarks";
const defaultBookmarkFields = {
@@ -53,6 +54,22 @@ function toZodSchema(
};
}
+export async function updateBookmark(
+ bookmarkId: string,
+ userId: string,
+ req: ZUpdateBookmarksRequest,
+) {
+ const bookmark = await prisma.bookmark.update({
+ where: {
+ id: bookmarkId,
+ userId,
+ },
+ data: req,
+ select: defaultBookmarkFields,
+ });
+ return toZodSchema(bookmark);
+}
+
export async function deleteBookmark(bookmarkId: string, userId: string) {
await prisma.bookmark.delete({
where: {
diff --git a/packages/web/lib/types/api/bookmarks.ts b/packages/web/lib/types/api/bookmarks.ts
index c4aec646..9e602d73 100644
--- a/packages/web/lib/types/api/bookmarks.ts
+++ b/packages/web/lib/types/api/bookmarks.ts
@@ -33,8 +33,8 @@ export type ZNewBookmarkRequest = z.infer<typeof zNewBookmarkRequestSchema>;
// GET /v1/bookmarks
export const zGetBookmarksRequestSchema = z.object({
- archived: z.boolean().default(false),
- favourited: z.boolean().default(false),
+ archived: z.boolean().optional(),
+ favourited: z.boolean().optional(),
});
export type ZGetBookmarksRequest = z.infer<typeof zGetBookmarksRequestSchema>;
@@ -42,3 +42,11 @@ export const zGetBookmarksResponseSchema = z.object({
bookmarks: z.array(zBookmarkSchema),
});
export type ZGetBookmarksResponse = z.infer<typeof zGetBookmarksResponseSchema>;
+
+
+// PATCH /v1/bookmarks/[bookmarkId]
+export const zUpdateBookmarksRequestSchema = z.object({
+ archived: z.boolean().optional(),
+ favourited: z.boolean().optional(),
+});
+export type ZUpdateBookmarksRequest = z.infer<typeof zUpdateBookmarksRequestSchema>;