import * as z from "zod"; import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum,parseAsBoolean } from "nuqs/server" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { BasicContractTemplate, BasicContractView } from "@/db/schema"; export const basicContractTemplateSchema = z.object({ templateName: z.string().min(1, "템플릿 이름은 필수입니다."), // 유효기간을 숫자로 변경하고 적절한 검증 추가 validityPeriod: z.coerce .number({ required_error: "유효기간은 필수입니다.", invalid_type_error: "유효기간은 숫자여야 합니다." }) .int("유효기간은 정수여야 합니다.") .min(1, "유효기간은 최소 1개월 이상이어야 합니다.") .max(120, "유효기간은 최대 120개월(10년)을 초과할 수 없습니다.") .default(12) // 기본값 1년(12개월) .describe("계약 유효기간(개월)"), status: z.enum(["ACTIVE", "INACTIVE"], { required_error: "상태는 필수 선택사항입니다.", invalid_type_error: "올바른 상태 값이 아닙니다." }).default("ACTIVE"), fileName: z.string().min(1, "파일 이름은 필수입니다."), filePath: z.string().min(1, "파일 경로는 필수입니다."), }); export const searchParamsTemplatesCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault( [] ), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), // advanced filter filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) export const createBasicContractTemplateSchema = basicContractTemplateSchema.extend({}); export const updateBasicContractTemplateSchema = basicContractTemplateSchema.partial().extend({ id: z.number(), }); export const deleteBasicContractTemplateSchema = z.object({ id: z.number(), }); export type GetBasicContractTemplatesSchema = Awaited> export type CreateBasicContractTemplateSchema = z.infer; export type UpdateBasicContractTemplateSchema = z.infer; export type DeleteBasicContractTemplateSchema = 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 }, ]), // 고급 필터 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }); export type GetBasciContractsSchema = Awaited>;