From e8b47751660e24a6bd24941b6cb6b0ee79ffad3c Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sun, 19 May 2024 13:44:27 +0100 Subject: fix: Fix missing bookmarks during pagination if they got created in the same second. Fixes #140 --- packages/shared/types/bookmarks.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'packages/shared') diff --git a/packages/shared/types/bookmarks.ts b/packages/shared/types/bookmarks.ts index 1511db48..10dba0c8 100644 --- a/packages/shared/types/bookmarks.ts +++ b/packages/shared/types/bookmarks.ts @@ -91,6 +91,11 @@ export type ZNewBookmarkRequest = z.infer; export const DEFAULT_NUM_BOOKMARKS_PER_PAGE = 20; export const MAX_NUM_BOOKMARKS_PER_PAGE = 100; +const zCursorV2 = z.object({ + createdAt: z.date(), + id: z.string(), +}); + export const zGetBookmarksRequestSchema = z.object({ ids: z.array(z.string()).optional(), archived: z.boolean().optional(), @@ -98,13 +103,17 @@ export const zGetBookmarksRequestSchema = z.object({ tagId: z.string().optional(), listId: z.string().optional(), limit: z.number().max(MAX_NUM_BOOKMARKS_PER_PAGE).optional(), - cursor: z.date().nullish(), + cursor: zCursorV2.or(z.date()).nullish(), + // TODO: Remove this field once all clients are updated to use the new cursor structure. + // This is done for backward comptability. If a client doesn't send this field, we'll assume it's an old client + // and repsond with the old cursor structure. Once all clients are updated, we can remove this field and drop the old cursor structure. + useCursorV2: z.boolean().optional(), }); export type ZGetBookmarksRequest = z.infer; export const zGetBookmarksResponseSchema = z.object({ bookmarks: z.array(zBookmarkSchema), - nextCursor: z.date().nullable(), + nextCursor: zCursorV2.or(z.date()).nullable(), }); export type ZGetBookmarksResponse = z.infer; -- cgit v1.2.3-70-g09d2