diff options
| author | MohamedBassem <me@mbassem.com> | 2024-02-09 16:47:17 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-02-09 16:51:24 +0000 |
| commit | 7400914396eea0c9a1fb7bc59e022babc2186f42 (patch) | |
| tree | 36e4a3d05b43d15254d75fddebc0594747b70a91 /packages/web/lib | |
| parent | 5c0fd0143e5ded1d8e957ec5e59e21d7c629d036 (diff) | |
| download | karakeep-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.ts | 9 | ||||
| -rw-r--r-- | packages/web/lib/services/bookmarks.ts | 17 | ||||
| -rw-r--r-- | packages/web/lib/types/api/bookmarks.ts | 12 |
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>; |
