From d8582b31410db5ff2effd881144c68b1cb1e6d6f Mon Sep 17 00:00:00 2001 From: JeongwooSeo Date: Sat, 28 Mar 2026 14:09:25 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=EC=88=98=EC=A0=95=EB=AA=A8=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=8B=9C=EB=A6=AC=EC=A6=88=EA=B0=80=20?= =?UTF-8?q?=EB=B0=94=EB=80=8C=EB=8D=98=20=EB=AC=B8=EC=A0=9C=EB=A5=BC=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/hooks/post/usePost.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/hooks/post/usePost.ts b/app/hooks/post/usePost.ts index 03317b1..07fccc5 100644 --- a/app/hooks/post/usePost.ts +++ b/app/hooks/post/usePost.ts @@ -80,7 +80,10 @@ const usePost = (slug = '') => { try { const data = await getAllSeriesData(); setSeriesList(data); - setFormData((prev) => ({ ...prev, seriesId: data[0]._id })); + // 편집 모드(slug 존재)에서는 getPostDetail이 seriesId를 설정하므로 덮어쓰지 않음 + if (!slug) { + setFormData((prev) => ({ ...prev, seriesId: data[0]._id })); + } setUIState((prev) => ({ ...prev, seriesLoading: false })); } catch (e) { console.error('시리즈 조회 중 오류 발생', e); From 9d428040786841a9f402373ec6ebc03e2876ddcd Mon Sep 17 00:00:00 2001 From: JeongwooSeo Date: Sat, 28 Mar 2026 14:12:59 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EA=B8=80=EC=97=90=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=97=86=EB=8A=94=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=8B=9C=EB=A6=AC=EC=A6=88=20=EC=8D=B8=EB=84=A4=EC=9D=BC?= =?UTF-8?q?=EC=9D=84=20fallback=EC=9C=BC=EB=A1=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/posts/[slug]/route.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/api/posts/[slug]/route.ts b/app/api/posts/[slug]/route.ts index 83ad40e..aa42ee3 100644 --- a/app/api/posts/[slug]/route.ts +++ b/app/api/posts/[slug]/route.ts @@ -47,9 +47,17 @@ export async function PUT( const body = await req.json(); const post = await Post.findOne({ slug: params.slug }); + let thumbnailOfPost = getThumbnailInMarkdown(body.content); + if (!thumbnailOfPost) { + const seriesThumbnail = await Series.findById(body.seriesId).select('thumbnailImage'); + thumbnailOfPost = + seriesThumbnail?.thumbnailImage || + '/images/placeholder/thumbnail_example2.webp'; + } + const updatedPost = await Post.findOneAndUpdate( { slug: params.slug }, - { ...body, thumbnailImage: getThumbnailInMarkdown(body.content) }, + { ...body, thumbnailImage: thumbnailOfPost }, { new: true, runValidators: true, From 95ee7ada7a57d07c61559733c732b16fc0a64dc5 Mon Sep 17 00:00:00 2001 From: JeongwooSeo Date: Sat, 28 Mar 2026 14:43:47 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20blog=20form=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EB=8D=94=20=ED=8E=B8=ED=95=9C=20=EC=97=AC?= =?UTF-8?q?=EB=B0=B1=EC=9C=BC=EB=A1=9C=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/write/page.tsx | 2 +- app/entities/post/write/BlogForm.tsx | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/admin/write/page.tsx b/app/admin/write/page.tsx index 2e2cff6..270d456 100644 --- a/app/admin/write/page.tsx +++ b/app/admin/write/page.tsx @@ -9,7 +9,7 @@ export const generateMetadata = async (): Promise => { const BlogWritePage = () => { return ( -
+
); diff --git a/app/entities/post/write/BlogForm.tsx b/app/entities/post/write/BlogForm.tsx index cdeffda..0f5d0da 100644 --- a/app/entities/post/write/BlogForm.tsx +++ b/app/entities/post/write/BlogForm.tsx @@ -240,7 +240,7 @@ const BlogForm = () => { }; return ( -
+

글 {slug ? '수정' : '작성'}

@@ -294,7 +294,11 @@ const BlogForm = () => { setFormData({ content: value })} - extraCommands={[calloutCommand, commands.divider, ...commands.getExtraCommands()]} + extraCommands={[ + calloutCommand, + commands.divider, + ...commands.getExtraCommands(), + ]} height={500} minHeight={500} visibleDragbar={false} @@ -304,8 +308,13 @@ const BlogForm = () => { 'data-color-mode': theme, }, components: { - callout: ({ emoji, children }: { emoji?: string; children?: React.ReactNode }) => - {children}, + callout: ({ + emoji, + children, + }: { + emoji?: string; + children?: React.ReactNode; + }) => {children}, } as any, rehypeRewrite: (node, index?, parent?) => { asideToCallout(node);