Files
sori.studio/server/utils/content-schema.js
zenn 00999404a4 페이지 섹션·공개 목록 설정 누적 변경 일괄 반영
페이지 섹션 관리와 홈 Pages 진열장 연동, 공개 목록 표시개수 설정 관련 누적 로컬 변경을 기능 단위로 정리해 반영한다.
문서 이력과 패키지 버전을 v1.9.23으로 맞춰 코드와 문서 상태를 동기화한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 18:48:42 +09:00

62 lines
1.9 KiB
JavaScript

import { z } from 'zod'
export const postStatusSchema = z.enum(['published', 'draft', 'members', 'private'])
export const pageStatusSchema = z.enum(['published', 'draft', 'private'])
export const postSchema = z.object({
id: z.string().uuid(),
title: z.string().min(1),
slug: z.string().min(1),
content: z.string(),
excerpt: z.string().default(''),
featuredImage: z.string().nullable().default(null),
isFeatured: z.boolean().default(false),
commentCount: z.number().int().default(0),
seoTitle: z.string().default(''),
seoDescription: z.string().default(''),
canonicalUrl: z.string().default(''),
noindex: z.boolean().default(false),
ogImage: z.string().nullable().default(null),
status: postStatusSchema,
publishedAt: z.string().nullable().default(null),
createdAt: z.string(),
updatedAt: z.string(),
tags: z.array(z.string()).default([])
})
export const pageSchema = z.object({
id: z.string().uuid(),
title: z.string().min(1),
slug: z.string().min(1),
content: z.string(),
renderMode: z.enum(['markdown', 'html_document']).default('markdown'),
status: pageStatusSchema.default('published'),
featuredImage: z.string().nullable().default(null),
isListed: z.boolean().default(false),
isFeatured: z.boolean().default(false),
listingSection: z.string().default(''),
listingTitle: z.string().default(''),
listingDescription: z.string().default(''),
listingSortOrder: z.number().int().default(0),
createdAt: z.string(),
updatedAt: z.string()
})
export const pageSectionSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1),
sortOrder: z.number().int().default(0),
pageCount: z.number().int().default(0),
createdAt: z.string(),
updatedAt: z.string()
})
export const tagSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1),
slug: z.string().min(1),
description: z.string().default(''),
sortOrder: z.number().int().default(0),
color: z.string().default('#15171a')
})