From dd20ba9785cdbd3d61f6b014d003d3bd9646ad13 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Thu, 14 Aug 2025 00:26:53 +0000 Subject: (고건) 리스크 관리 페이지 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/risk-management/validations.ts | 69 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 lib/risk-management/validations.ts (limited to 'lib/risk-management/validations.ts') diff --git a/lib/risk-management/validations.ts b/lib/risk-management/validations.ts new file mode 100644 index 00000000..494a0b74 --- /dev/null +++ b/lib/risk-management/validations.ts @@ -0,0 +1,69 @@ +/* IMPORT */ +import * as z from 'zod'; +import { + createSearchParamsCache, + parseAsArrayOf, + parseAsInteger, + parseAsString, + parseAsStringEnum, +} from 'nuqs/server'; +import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; +import { RisksView } from '@/db/schema'; + +// ---------------------------------------------------------------------------------------------------- + +function getPreviousWeekday(date: Date) { + const referenceTime = new Date(date); + referenceTime.setHours(6, 0, 0, 0); + + const result = new Date(date); + if (date < referenceTime) { + result.setDate(result.getDate() - 1); + } + + const day = result.getDay(); + if (day === 1) { + result.setDate(result.getDate() - 3); + } else if (day === 0) { + result.setDate(result.getDate() - 2); + } else { + result.setDate(result.getDate() - 1); + } + return result; +} +const previousWorkday = getPreviousWeekday(new Date()); +const defaultFrom = new Date(previousWorkday); +defaultFrom.setHours(0, 0, 0, 0); +const defaultTo = new Date(previousWorkday); +defaultTo.setHours(23, 59, 59, 999); +const defaultFromStr = defaultFrom.toISOString(); +const defaultToStr = defaultTo.toISOString(); + +/* QUERY PARAMETER SCHEMATA */ +const searchParamsCache = createSearchParamsCache({ + flags: parseAsArrayOf(z.enum(['advancedTable', 'floatingBar'])).withDefault([]), + page: parseAsInteger.withDefault(1), + perPage: parseAsInteger.withDefault(10), + sort: getSortingStateParser().withDefault([ + { id: 'occuredAt', desc: true }, + ]), + filters: getFiltersStateParser().withDefault([]), + joinOperator: parseAsStringEnum(['and', 'or']).withDefault('and'), + search: parseAsString.withDefault(''), + from: parseAsString.withDefault(defaultFromStr), + to: parseAsString.withDefault(defaultToStr), +}); + +// ---------------------------------------------------------------------------------------------------- + +/* TYPES */ +type GetRisksSchema = Awaited>; + +// ---------------------------------------------------------------------------------------------------- + +/* EXPORT */ +export { + getPreviousWeekday, + searchParamsCache, + type GetRisksSchema, +}; \ No newline at end of file -- cgit v1.2.3