import { getMethod, getRequestHeader, getRequestURL, setResponseHeader } from 'h3' import { isBotUserAgent } from '../../lib/analytics' import { createVisitorHashFromEvent, recordAnalyticsPageview } from '../repositories/analytics-repository' import { getPageBySlug } from '../repositories/content-repository' /** * 공개 페이지가 HTML 문서 모드일 때 Nuxt 렌더링 대신 원문 HTML을 응답한다. * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise} HTML 문서 또는 다음 핸들러 진행 */ export default defineEventHandler(async (event) => { const method = getMethod(event) if (method !== 'GET' && method !== 'HEAD') { return } const pathname = getRequestURL(event).pathname const match = pathname.match(/^\/pages\/([^/]+)\/?$/) if (!match) { return } const slug = decodeURIComponent(match[1]) const page = await getPageBySlug(slug) if (page?.renderMode !== 'html_document') { return } if (method === 'GET' && !isBotUserAgent(String(getRequestHeader(event, 'user-agent') || ''))) { await recordAnalyticsPageview({ visitorHash: createVisitorHashFromEvent(event), pageId: page.id, recordSite: true, recordView: true, recordRead: false }) } setResponseHeader(event, 'content-type', 'text/html; charset=utf-8') setResponseHeader(event, 'cache-control', 'no-cache') return page.content || '' })