import { z } from 'zod' import { normalizeMarkdownContent } from '../../lib/markdown-content-normalizer.js' import { postStatusSchema } from './content-schema.js' export const adminPostInputSchema = z.object({ title: z.string().trim().min(1), slug: z.string().trim().min(1).regex(/^[a-z0-9가-힣]+(?:-[a-z0-9가-힣]+)*$/), content: z.preprocess(normalizeMarkdownContent, z.string()).default(''), excerpt: z.string().default(''), featuredImage: z.string().trim().nullable().default(null), seoTitle: z.string().trim().default(''), seoDescription: z.string().trim().default(''), canonicalUrl: z.string().trim().url().or(z.literal('')).default(''), noindex: z.boolean().default(false), ogImage: z.string().trim().nullable().default(null), status: postStatusSchema.default('draft'), publishedAt: z.string().datetime().nullable().default(null), tags: z.array(z.string().trim().min(1)).default([]) }) /** * 관리자 게시물 입력값 정리 * @param {unknown} body - 요청 본문 * @returns {import('zod').SafeParseReturnType} 검증 결과 */ export const parseAdminPostInput = (body) => adminPostInputSchema.safeParse(body)