summaryrefslogtreecommitdiff
path: root/lib/poa/validations.ts
blob: eae1b5abd48baa1ea9c4e0e3365e981e5d10dfea (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
import {
  createSearchParamsCache,
  parseAsArrayOf,
  parseAsInteger,
  parseAsString,
  parseAsStringEnum,
} from "nuqs/server"
import * as z from "zod"

import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"
import { POADetail } from "@/db/schema/contract"

export const searchParamsCache = createSearchParamsCache({
  // UI 모드나 플래그 관련
  flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),

  // 페이징
  page: parseAsInteger.withDefault(1),
  perPage: parseAsInteger.withDefault(10),

  // 정렬 (createdAt 기준 내림차순)
  sort: getSortingStateParser<POADetail>().withDefault([
    { id: "createdAt", desc: true },
  ]),

  // 원본 PO 관련
  contractNo: parseAsString.withDefault(""),
  originalContractName: parseAsString.withDefault(""),
  originalStatus: parseAsString.withDefault(""),
  originalStartDate: parseAsString.withDefault(""),
  originalEndDate: parseAsString.withDefault(""),

  // 프로젝트 정보
  projectId: parseAsString.withDefault(""),
  projectCode: parseAsString.withDefault(""),
  projectName: parseAsString.withDefault(""),

  // 벤더 정보
  vendorId: parseAsString.withDefault(""),
  vendorName: parseAsString.withDefault(""),

  // 납품 관련
  deliveryTerms: parseAsString.withDefault(""),
  deliveryDate: parseAsString.withDefault(""),
  deliveryLocation: parseAsString.withDefault(""),

  // 금액 관련
  currency: parseAsString.withDefault(""),
  totalAmount: parseAsString.withDefault(""),
  discount: parseAsString.withDefault(""),
  tax: parseAsString.withDefault(""),
  shippingFee: parseAsString.withDefault(""),
  netTotal: parseAsString.withDefault(""),

  // 변경 사유 및 승인 상태
  changeReason: parseAsString.withDefault(""),
  approvalStatus: parseAsString.withDefault(""),

  // 고급 필터(Advanced) & 검색
  filters: getFiltersStateParser().withDefault([]),
  joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
  search: parseAsString.withDefault(""),
})

// 최종 타입
export type GetChangeOrderSchema = Awaited<ReturnType<typeof searchParamsCache.parse>>