summaryrefslogtreecommitdiff
path: root/lib/risk-management/validations.ts
blob: 494a0b74bb55172e4deb91d95e51a6d5ecdd6d1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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,
};