페이지 섹션·공개 목록 설정 누적 변경 일괄 반영
페이지 섹션 관리와 홈 Pages 진열장 연동, 공개 목록 표시개수 설정 관련 누적 로컬 변경을 기능 단위로 정리해 반영한다. 문서 이력과 패키지 버전을 v1.9.23으로 맞춰 코드와 문서 상태를 동기화한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,9 +8,16 @@ export const adminPageInputSchema = z.object({
|
||||
renderMode: z.enum(['markdown', 'html_document']).default('html_document'),
|
||||
status: pageStatusSchema.default('published'),
|
||||
content: z.string().default(''),
|
||||
featuredImage: z.string().trim().nullable().default(null)
|
||||
featuredImage: z.string().trim().nullable().default(null),
|
||||
isListed: z.boolean().optional().default(false),
|
||||
isFeatured: z.boolean().optional().default(false),
|
||||
listingSection: z.string().trim().max(80).optional().default(''),
|
||||
listingTitle: z.string().trim().max(160).optional().default(''),
|
||||
listingDescription: z.string().trim().max(500).optional().default(''),
|
||||
listingSortOrder: z.number().int().min(0).max(9999).optional().default(0)
|
||||
}).transform((input) => ({
|
||||
...input,
|
||||
isFeatured: input.isListed ? input.isFeatured : false,
|
||||
content: input.renderMode === 'html_document'
|
||||
? input.content
|
||||
: normalizeMarkdownContent(input.content)
|
||||
|
||||
@@ -25,6 +25,16 @@ import {
|
||||
MIN_POST_TAG_LIMIT,
|
||||
normalizePostTagLimit
|
||||
} from '../../lib/post-tag-limit.js'
|
||||
import {
|
||||
DEFAULT_FEATURED_POST_LIMIT,
|
||||
DEFAULT_HOME_LATEST_POST_LIMIT,
|
||||
DEFAULT_PAGE_SECTION_ITEM_LIMIT,
|
||||
DEFAULT_POST_LIST_PAGE_SIZE,
|
||||
DEFAULT_TAG_POST_LIST_PAGE_SIZE,
|
||||
MAX_DISPLAY_COUNT,
|
||||
MIN_DISPLAY_COUNT,
|
||||
normalizeDisplayCount
|
||||
} from '../../lib/display-count-settings.js'
|
||||
|
||||
export const adminSiteSettingsInputSchema = z.object({
|
||||
title: z.string().trim().min(1),
|
||||
@@ -37,6 +47,11 @@ export const adminSiteSettingsInputSchema = z.object({
|
||||
socialLinks: z.unknown().optional().default([]),
|
||||
showPostUpdatedAt: z.boolean().optional().default(false),
|
||||
postTagLimit: z.coerce.number().int().min(MIN_POST_TAG_LIMIT).max(MAX_POST_TAG_LIMIT).optional().default(DEFAULT_POST_TAG_LIMIT),
|
||||
homeLatestPostLimit: z.coerce.number().int().min(MIN_DISPLAY_COUNT).max(MAX_DISPLAY_COUNT).optional().default(DEFAULT_HOME_LATEST_POST_LIMIT),
|
||||
postListPageSize: z.coerce.number().int().min(MIN_DISPLAY_COUNT).max(MAX_DISPLAY_COUNT).optional().default(DEFAULT_POST_LIST_PAGE_SIZE),
|
||||
tagPostListPageSize: z.coerce.number().int().min(MIN_DISPLAY_COUNT).max(MAX_DISPLAY_COUNT).optional().default(DEFAULT_TAG_POST_LIST_PAGE_SIZE),
|
||||
featuredPostLimit: z.coerce.number().int().min(MIN_DISPLAY_COUNT).max(MAX_DISPLAY_COUNT).optional().default(DEFAULT_FEATURED_POST_LIMIT),
|
||||
pageSectionItemLimit: z.coerce.number().int().min(MIN_DISPLAY_COUNT).max(MAX_DISPLAY_COUNT).optional().default(DEFAULT_PAGE_SECTION_ITEM_LIMIT),
|
||||
homeCoverImageUrl: z.string().trim().max(500).optional().default(''),
|
||||
homeCoverDarkImageUrl: z.string().trim().max(500).optional().default(''),
|
||||
homeCoverTitle: z.string().trim().max(120).optional().default(''),
|
||||
@@ -89,6 +104,11 @@ export const adminSiteSettingsInputSchema = z.object({
|
||||
brandColor: normalizeBrandColor(data.brandColor),
|
||||
socialLinks: normalizeSocialLinks(data.socialLinks),
|
||||
postTagLimit: normalizePostTagLimit(data.postTagLimit),
|
||||
homeLatestPostLimit: normalizeDisplayCount(data.homeLatestPostLimit, DEFAULT_HOME_LATEST_POST_LIMIT),
|
||||
postListPageSize: normalizeDisplayCount(data.postListPageSize, DEFAULT_POST_LIST_PAGE_SIZE),
|
||||
tagPostListPageSize: normalizeDisplayCount(data.tagPostListPageSize, DEFAULT_TAG_POST_LIST_PAGE_SIZE),
|
||||
featuredPostLimit: normalizeDisplayCount(data.featuredPostLimit, DEFAULT_FEATURED_POST_LIMIT),
|
||||
pageSectionItemLimit: normalizeDisplayCount(data.pageSectionItemLimit, DEFAULT_PAGE_SECTION_ITEM_LIMIT),
|
||||
announcementUrl: normalizeAnnouncementUrl(data.announcementUrl),
|
||||
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(data.announcementBackgroundColor),
|
||||
announcementAlignment: normalizeAnnouncementAlignment(data.announcementAlignment),
|
||||
|
||||
@@ -32,6 +32,21 @@ export const pageSchema = z.object({
|
||||
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()
|
||||
})
|
||||
|
||||
@@ -39,6 +39,12 @@ const samplePages = [
|
||||
content: 'sori.studio 소개 페이지입니다.',
|
||||
renderMode: 'markdown',
|
||||
featuredImage: null,
|
||||
isListed: true,
|
||||
isFeatured: true,
|
||||
listingSection: '소개',
|
||||
listingTitle: 'About',
|
||||
listingDescription: 'sori.studio 소개와 운영 방향을 정리한 페이지입니다.',
|
||||
listingSortOrder: 10,
|
||||
createdAt: now,
|
||||
updatedAt: now
|
||||
}
|
||||
|
||||
@@ -5,6 +5,13 @@ import {
|
||||
} from '../../lib/announcement-bar.js'
|
||||
import { DEFAULT_SIGNUP_BLOCKED_USERNAMES } from '../../lib/signup-blocked-usernames.js'
|
||||
import { DEFAULT_POST_TAG_LIMIT } from '../../lib/post-tag-limit.js'
|
||||
import {
|
||||
DEFAULT_FEATURED_POST_LIMIT,
|
||||
DEFAULT_HOME_LATEST_POST_LIMIT,
|
||||
DEFAULT_PAGE_SECTION_ITEM_LIMIT,
|
||||
DEFAULT_POST_LIST_PAGE_SIZE,
|
||||
DEFAULT_TAG_POST_LIST_PAGE_SIZE
|
||||
} from '../../lib/display-count-settings.js'
|
||||
|
||||
/**
|
||||
* 기본 사이트 설정 반환
|
||||
@@ -25,6 +32,11 @@ export const getDefaultSiteSettings = () => {
|
||||
socialLinks: [],
|
||||
showPostUpdatedAt: false,
|
||||
postTagLimit: DEFAULT_POST_TAG_LIMIT,
|
||||
homeLatestPostLimit: DEFAULT_HOME_LATEST_POST_LIMIT,
|
||||
postListPageSize: DEFAULT_POST_LIST_PAGE_SIZE,
|
||||
tagPostListPageSize: DEFAULT_TAG_POST_LIST_PAGE_SIZE,
|
||||
featuredPostLimit: DEFAULT_FEATURED_POST_LIMIT,
|
||||
pageSectionItemLimit: DEFAULT_PAGE_SECTION_ITEM_LIMIT,
|
||||
homeCoverImageUrl: '',
|
||||
homeCoverDarkImageUrl: '',
|
||||
homeCoverTitle: '',
|
||||
|
||||
Reference in New Issue
Block a user