import { z } from "zod" import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, parseAsBoolean, } from "nuqs/server" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" import { PageInformation } from "@/db/schema/information" // 인포메이션 수정 스키마 export const updateInformationSchema = z.object({ id: z.number(), informationContent: z.string().min(1, "내용을 입력해주세요"), attachmentFileName: z.string().optional(), attachmentFilePath: z.string().optional(), attachmentFileSize: z.string().optional(), isActive: z.boolean().default(true), }) // 현대적인 검색 파라미터 캐시 (프로젝트 패턴과 동일) export const searchParamsInformationCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), // 기본 검색 필드들 pagePath: parseAsString.withDefault(""), pageName: parseAsString.withDefault(""), informationContent: parseAsString.withDefault(""), isActive: parseAsBoolean, // 고급 필터 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), // 날짜 범위 from: parseAsString, to: parseAsString, }) // 타입 추출 export type UpdateInformationSchema = z.infer export type GetInformationSchema = Awaited> // 기존 스키마 (하위 호환성을 위해 유지) export const getInformationSchema = z.object({ page: z.coerce.number().default(1), per_page: z.coerce.number().default(10), sort: z.string().optional(), isActive: z.coerce.boolean().optional(), from: z.string().optional(), to: z.string().optional(), }) // 페이지 경로별 인포메이션 조회 스키마 export const getPageInformationSchema = z.object({ pagePath: z.string().min(1, "페이지 경로를 입력해주세요"), }) export type GetPageInformationSchema = z.infer