import { createError, getRouterParam, readBody } from 'h3' import { requireAdminSession } from '../../../../utils/admin-auth' import { parseAdminPostInput } from '../../../../utils/admin-post-input' import { getSiteSettings, updateAdminPost } from '../../../../repositories/content-repository' /** * 관리자 게시물 수정 API * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise} 수정된 게시물 */ export default defineEventHandler(async (event) => { const adminSession = requireAdminSession(event) const id = getRouterParam(event, 'id') const parsedBody = parseAdminPostInput(await readBody(event)) if (!parsedBody.success) { throw createError({ statusCode: 400, message: '게시물 입력 형식이 올바르지 않습니다.' }) } const settings = await getSiteSettings() const postTagLimit = Number(settings.postTagLimit || 5) if (parsedBody.data.tags.length > postTagLimit) { throw createError({ statusCode: 400, message: `태그는 최대 ${postTagLimit}개까지 선택할 수 있습니다.` }) } try { const post = await updateAdminPost(id, parsedBody.data, adminSession.userId) if (!post) { throw createError({ statusCode: 404, message: '게시물을 찾을 수 없습니다.' }) } return post } catch (error) { if (error?.code === '23505') { throw createError({ statusCode: 409, message: '이미 사용 중인 슬러그입니다.' }) } throw error } })