From a35b096d73f03c9878d0d981464b849c9e6be5a3 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 24 May 2022 18:25:32 +0800 Subject: [PATCH] Support sort and filter by published in resolver --- packages/api/src/resolvers/article/index.ts | 41 ++------------------- packages/api/src/utils/search.ts | 38 ++++++++++++++----- 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/packages/api/src/resolvers/article/index.ts b/packages/api/src/resolvers/article/index.ts index a2bedd1ff..69ce55743 100644 --- a/packages/api/src/resolvers/article/index.ts +++ b/packages/api/src/resolvers/article/index.ts @@ -448,16 +448,7 @@ export const getArticlesResolver = authorized< event: 'get_articles', properties: { env: env.server.apiEnv, - query: searchQuery.query, - inFilter: searchQuery.inFilter, - readFilter: searchQuery.readFilter, - typeFilter: searchQuery.typeFilter, - labelFilters: searchQuery.labelFilters, - sortParams: searchQuery.sortParams, - hasFilters: searchQuery.hasFilters, - savedDateFilter: searchQuery.savedDateFilter, - publishedDateFilter: searchQuery.publishedDateFilter, - subscriptionFilter: searchQuery.subscriptionFilter, + ...searchQuery, }, }) @@ -466,16 +457,8 @@ export const getArticlesResolver = authorized< from: Number(startCursor), size: first + 1, // fetch one more item to get next cursor sort: searchQuery.sortParams, - query: searchQuery.query, - inFilter: searchQuery.inFilter, - readFilter: searchQuery.readFilter, - typeFilter: searchQuery.typeFilter, - labelFilters: searchQuery.labelFilters, - hasFilters: searchQuery.hasFilters, - savedDateFilter: searchQuery.savedDateFilter, - publishedDateFilter: searchQuery.publishedDateFilter, - subscriptionFilter: searchQuery.subscriptionFilter, includePending: params.includePending, + ...searchQuery, }, claims.uid )) || [[], 0] @@ -818,16 +801,8 @@ export const searchResolver = authorized< userId: claims.uid, event: 'search', properties: { - query: searchQuery.query, - inFilter: searchQuery.inFilter, - readFilter: searchQuery.readFilter, - typeFilter: searchQuery.typeFilter, - labelFilters: searchQuery.labelFilters, - sortParams: searchQuery.sortParams, - hasFilters: searchQuery.hasFilters, - savedDateFilter: searchQuery.savedDateFilter, - publishedDateFilter: searchQuery.publishedDateFilter, env: env.server.apiEnv, + ...searchQuery, }, }) @@ -853,16 +828,8 @@ export const searchResolver = authorized< from: Number(startCursor), size: first + 1, // fetch one more item to get next cursor sort: searchQuery.sortParams, - query: searchQuery.query, - inFilter: searchQuery.inFilter, - readFilter: searchQuery.readFilter, - typeFilter: searchQuery.typeFilter, - labelFilters: searchQuery.labelFilters, - hasFilters: searchQuery.hasFilters, - savedDateFilter: searchQuery.savedDateFilter, - publishedDateFilter: searchQuery.publishedDateFilter, - subscriptionFilter: searchQuery.subscriptionFilter, includePending: true, + ...searchQuery, }, claims.uid )) || [[], 0] diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 73fcbef16..c1fa1c7f4 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -31,8 +31,7 @@ export type SearchFilter = { labelFilters: LabelFilter[] sortParams?: SortParams hasFilters: HasFilter[] - savedDateFilter?: DateRangeFilter - publishedDateFilter?: DateRangeFilter + dateFilters: DateFilter[] subscriptionFilter?: SubscriptionFilter } @@ -51,7 +50,8 @@ export enum HasFilter { SHARED_AT, } -export type DateRangeFilter = { +export interface DateFilter { + field: string startDate?: Date endDate?: Date } @@ -60,6 +60,7 @@ export enum SortBy { SAVED = 'savedAt', UPDATED = 'updatedAt', SCORE = '_score', + PUBLISHED = 'publishedAt', } export enum SortOrder { @@ -67,7 +68,7 @@ export enum SortOrder { DESCENDING = 'desc', } -export type SortParams = { +export interface SortParams { by: SortBy order?: SortOrder } @@ -171,6 +172,11 @@ const parseSortParams = (str?: string): SortParams | undefined => { return { by: SortBy.SCORE, } + case 'PUBLISHED': + return { + by: SortBy.PUBLISHED, + order: sortOrder, + } } } @@ -185,7 +191,10 @@ const parseHasFilter = (str?: string): HasFilter | undefined => { } } -const parseDateRangeFilter = (str?: string): DateRangeFilter | undefined => { +const parseDateFilter = ( + field: string, + str?: string +): DateFilter | undefined => { if (str === undefined) { return undefined } @@ -194,7 +203,16 @@ const parseDateRangeFilter = (str?: string): DateRangeFilter | undefined => { const startDate = start && start !== '*' ? new Date(start) : undefined const endDate = end && end !== '*' ? new Date(end) : undefined + switch (field.toUpperCase()) { + case 'PUBLISHED': + field = 'publishedAt' + break + case 'SAVED': + field = 'savedAt' + } + return { + field, startDate, endDate, } @@ -220,6 +238,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => { inFilter: searchQuery ? InFilter.ALL : InFilter.INBOX, labelFilters: [], hasFilters: [], + dateFilters: [], } if (!searchQuery) { @@ -229,6 +248,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => { readFilter: ReadFilter.ALL, labelFilters: [], hasFilters: [], + dateFilters: [], } } @@ -296,11 +316,11 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => { break } case 'saved': - result.savedDateFilter = parseDateRangeFilter(keyword.value) - break - case 'published': - result.publishedDateFilter = parseDateRangeFilter(keyword.value) + case 'published': { + const dateFilter = parseDateFilter(keyword.keyword, keyword.value) + dateFilter && result.dateFilters.push(dateFilter) break + } case 'subscription': result.subscriptionFilter = parseSubscriptionFilter(keyword.value) break