import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from 'nuqs/server'; import { z } from 'zod'; import { getFiltersStateParser, getSortingStateParser } from '@/lib/parsers'; import { approvalTemplateCategories } from '@/db/schema/knox/approvals'; // 검색 파라미터 캐시 export const SearchParamsApprovalTemplateCategoryCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(['advancedTable', 'floatingBar'])).withDefault([]), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: 'sortOrder', desc: false }, { id: 'name', desc: false }, ]), filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(['and', 'or']).withDefault('and'), search: parseAsString.withDefault(''), }); export type GetApprovalTemplateCategorySchema = Awaited< ReturnType >; // 카테고리 생성 스키마 export const createApprovalTemplateCategorySchema = z.object({ name: z.string().min(1, '카테고리 이름을 입력해주세요.').max(100, '카테고리 이름은 100자 이내로 입력해주세요.'), description: z.string().max(500, '설명은 500자 이내로 입력해주세요.').optional(), sortOrder: z.number().int().min(0).default(0), }); // 카테고리 업데이트 스키마 export const updateApprovalTemplateCategorySchema = z.object({ name: z.string().min(1, '카테고리 이름을 입력해주세요.').max(100, '카테고리 이름은 100자 이내로 입력해주세요.').optional(), description: z.string().max(500, '설명은 500자 이내로 입력해주세요.').optional(), isActive: z.boolean().optional(), sortOrder: z.number().int().min(0).optional(), }); export type CreateApprovalTemplateCategorySchema = z.infer; export type UpdateApprovalTemplateCategorySchema = z.infer;