// /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 export const searchParamsCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault( [] ), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().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 export type GetTagsSchema = Awaited>