summaryrefslogtreecommitdiff
path: root/lib/tags/validations.ts
blob: 65e64f04439c36c025f2ca66055b714ab783794a (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
// /lib/tags/validations.ts
import { z } from "zod"
import {
  createSearchParamsCache,
  parseAsArrayOf,
  parseAsInteger,
  parseAsString,
  parseAsStringEnum,
} from "nuqs/server"
import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"
import { Tag } from "@/db/schema/vendorData"

export const createTagSchema = z.object({
  tagNo: z.string().min(1, "Tag No is required"),
  tagType: z.string().min(1, "Tag Type is required"),
  class: z.string().min(1, "Equipment Class is required"),
  description: z.string().min(1, "Description is required"), // 필수 필드로 변경

    // optional sub-fields for dynamic numbering
    functionCode: z.string().optional(),
    seqNumber: z.string().optional(),
    valveAcronym: z.string().optional(),
    processUnit: z.string().optional(),

  // If you also want contractItemId:
  // contractItemId: z.number(),
})

export const updateTagSchema = z.object({
  id: z.number().optional(), // 업데이트 과정에서 별도 검증
  tagNo: z.string().min(1, "Tag Number is required"),
  class: z.string().min(1, "Class is required"),
  tagType: z.string().min(1, "Tag Type is required"),
  description: z.string().optional(),
  // 추가 필드들은 동적으로 추가될 수 있음
  functionCode: z.string().optional(),
  seqNumber: z.string().optional(), 
  valveAcronym: z.string().optional(),
  processUnit: z.string().optional(),
  // 기타 필드들은 필요에 따라 추가
})

export type UpdateTagSchema = z.infer<typeof updateTagSchema>


export const searchParamsCache = createSearchParamsCache({
  flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault(
    []
  ),
  page: parseAsInteger.withDefault(1),
  perPage: parseAsInteger.withDefault(10),
  sort: getSortingStateParser<Tag>().withDefault([
    { id: "createdAt", desc: true },
  ]),
  tagNo: parseAsString.withDefault(""),
  tagType: parseAsString.withDefault(""),
  description: parseAsString.withDefault(""),
 
  // advanced filter
  filters: getFiltersStateParser().withDefault([]),
  joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
  search: parseAsString.withDefault(""),

})

export type CreateTagSchema = z.infer<typeof createTagSchema>
export type GetTagsSchema = Awaited<ReturnType<typeof searchParamsCache.parse>>