import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server"; import * as z from "zod"; import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"; import { periodicEvaluations } from "@/db/schema"; // ============= 메인 검색 파라미터 스키마 ============= export const searchParamsEvaluationsCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }]), // 기본 필터들 evaluationYear: parseAsInteger.withDefault(new Date().getFullYear()), division: parseAsString.withDefault(""), status: parseAsString.withDefault(""), domesticForeign: parseAsString.withDefault(""), materialType: parseAsString.withDefault(""), consensusStatus: parseAsString.withDefault(""), // 고급 필터 filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), // 베이직 필터 (커스텀 필터 패널용) basicFilters: getFiltersStateParser().withDefault([]), basicJoinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), // 검색 search: parseAsString.withDefault(""), }); // ============= 타입 정의 ============= export type GetEvaluationsSchema = Awaited< ReturnType >;