import { z } from 'zod' export const adminNavigationItemInputSchema = z.object({ id: z.string().uuid(), label: z.string().trim().min(1), url: z.string().trim().min(1).regex(/^(\/|https?:\/\/|#)/), descriptionText: z.string().trim().max(200).optional().default(''), thumbnailUrl: z.string().trim().max(500).optional().default(''), location: z.enum(['primary', 'footer', 'recommended']), sortOrder: z.coerce.number().int().min(0).default(0), isVisible: z.boolean().default(true), parentId: z.union([z.string().uuid(), z.null()]).optional(), isFolder: z.boolean().default(false) }).superRefine((data, ctx) => { if ((data.location === 'footer' || data.location === 'recommended') && data.parentId) { ctx.addIssue({ code: 'custom', path: ['parentId'], message: '해당 위치 메뉴는 하위 항목을 가질 수 없습니다.' }) } }) export const adminNavigationInputSchema = z.object({ items: z.array(adminNavigationItemInputSchema) }) /** * 관리자 네비게이션 입력값 정리 * @param {unknown} body - 요청 본문 * @returns {import('zod').SafeParseReturnType} 검증 결과 */ export const parseAdminNavigationInput = (body) => adminNavigationInputSchema.safeParse(body)