summaryrefslogtreecommitdiff
path: root/lib/risk-management/validations.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/risk-management/validations.ts')
-rw-r--r--lib/risk-management/validations.ts69
1 files changed, 69 insertions, 0 deletions
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<RisksView>().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<ReturnType<typeof searchParamsCache.parse>>;
+
+// ----------------------------------------------------------------------------------------------------
+
+/* EXPORT */
+export {
+ getPreviousWeekday,
+ searchParamsCache,
+ type GetRisksSchema,
+}; \ No newline at end of file