/* 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, };