import * as z from "zod"; import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum } from "nuqs/server" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { GeneralContractTemplate } from "@/db/schema"; // Contract Template Schema export const contractTemplateSchema = z.object({ id: z.number().int().optional(), contractTemplateType: z.string().min(1, "계약종류는 필수입니다."), contractTemplateName: z.string().min(1, "계약문서명은 필수입니다."), revision: z.coerce.number().int().min(1).default(1), status: z.enum(["ACTIVE", "INACTIVE", "DISPOSED"], { required_error: "상태는 필수 선택사항입니다.", invalid_type_error: "올바른 상태 값이 아닙니다." }).default("ACTIVE"), legalReviewRequired: z.boolean().default(false), fileName: z.string().nullable().optional(), filePath: z.string().nullable().optional(), createdAt: z.date().optional(), updatedAt: z.date().optional(), createdBy: z.number().int().nullable().optional(), updatedBy: z.number().int().nullable().optional(), disposedAt: z.date().nullable().optional(), restoredAt: z.date().nullable().optional(), }); 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 createContractTemplateSchema = contractTemplateSchema.omit({ id: true, createdAt: true, updatedAt: true, createdBy: true, updatedBy: true, disposedAt: true, restoredAt: true, }); export const updateContractTemplateSchema = contractTemplateSchema.partial(); export const deleteContractTemplateSchema = z.object({ id: z.number(), }); export type ContractTemplateSchema = z.infer; export type CreateContractTemplateSchema = z.infer; export type UpdateContractTemplateSchema = z.infer; export type DeleteContractTemplateSchema = z.infer; export type GetContractTemplatesSchema = { page: number; perPage: number; sort: Array<{ id: string; desc: boolean }>; filters: Array<{ id: string; value: string[] }>; search: string; };