From bf5bf996c63cc3af92bc0f302ec37f7dbbc9e94a Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 14 Sep 2025 08:27:44 +0000 Subject: refactor: strongly type the search plugin interface --- packages/shared/search.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'packages/shared/search.ts') diff --git a/packages/shared/search.ts b/packages/shared/search.ts index 5158f30f..d23ab29f 100644 --- a/packages/shared/search.ts +++ b/packages/shared/search.ts @@ -24,18 +24,34 @@ export const zBookmarkSearchDocument = z.object({ export type BookmarkSearchDocument = z.infer; +export type SortOrder = "asc" | "desc"; +export type SortableAttributes = "createdAt"; + +export type FilterableAttributes = "userId" | "id"; +export type FilterQuery = + | { + type: "eq"; + field: FilterableAttributes; + value: string; + } + | { + type: "in"; + field: FilterableAttributes; + values: string[]; + }; + export interface SearchResult { id: string; score?: number; } export interface SearchOptions { - // TODO: Make query, filter and sort strongly typed query: string; - filter?: string[]; + // Diffeernt filters are ANDed together + filter?: FilterQuery[]; limit?: number; offset?: number; - sort?: string[]; + sort?: { field: SortableAttributes; order: SortOrder }[]; } export interface SearchResponse { -- cgit v1.2.3-70-g09d2