From 98faefa6444b01b3e5dfe2da4df62d29ec02bc3d Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 6 Nov 2023 18:38:04 +0800 Subject: [PATCH] add date variables to date search --- packages/api/src/utils/search.ts | 51 +++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index c83237500..d9bd61e5a 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -3,6 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { DateTime } from 'luxon' import { ISearchParserDictionary, parse, @@ -244,21 +245,49 @@ const parseDateFilter = ( return undefined } + switch (field.toLowerCase()) { + case 'published': + field = 'published_at' + break + case 'saved': + field = 'saved_at' + break + case 'updated': + field = 'updated_at' + } + + // check for special date filters + switch (str.toLowerCase()) { + case 'today': + return { + field, + startDate: DateTime.local().startOf('day').toJSDate(), + } + case 'yesterday': { + const yesterday = DateTime.local().minus({ days: 1 }) + return { + field, + startDate: yesterday.startOf('day').toJSDate(), + endDate: yesterday.endOf('day').toJSDate(), + } + } + case 'this week': + return { + field, + startDate: DateTime.local().startOf('week').toJSDate(), + } + case 'this month': + return { + field, + startDate: DateTime.local().startOf('month').toJSDate(), + } + } + + // check for date ranges const [start, end] = str.split('..') const startDate = start && start !== '*' ? new Date(start) : undefined const endDate = end && end !== '*' ? new Date(end) : undefined - switch (field.toUpperCase()) { - case 'PUBLISHED': - field = 'published_at' - break - case 'SAVED': - field = 'saved_at' - break - case 'UPDATED': - field = 'updated_at' - } - return { field, startDate,