import { eq, desc, asc } from 'drizzle-orm' import { useDB, schema } from '../../utils/db.js' function buildFromEntityTable(db, key, siteData) { switch (key) { case 'reviews': { const rows = db.select().from(schema.reviews) .where(eq(schema.reviews.published, true)) .orderBy(desc(schema.reviews.sortOrder)).all() const items = rows.map(r => ({ nickname: r.author, rating: r.rating, productVersion: r.title, content: r.content, travelDate: r.date, verified: r.verified })) return { summary: siteData?.summary || {}, items } } case 'faq': { const rows = db.select().from(schema.faqs) .where(eq(schema.faqs.published, true)) .orderBy(asc(schema.faqs.sortOrder)).all() const items = rows.map(r => ({ question: r.question, answer: r.answer })) if (siteData?.categories) { return { categories: siteData.categories, items } } return { categories: [{ name: '常见问题', items }] } } case 'gallery': { const rows = db.select().from(schema.galleryItems) .where(eq(schema.galleryItems.published, true)) .orderBy(asc(schema.galleryItems.sortOrder)).all() const works = rows.map(r => ({ title: r.title, category: r.category, location: r.location, description: r.description, image: r.image, orientation: r.orientation })) return { seo: siteData?.seo || {}, intro: siteData?.intro || {}, categories: siteData?.categories || [], works } } case 'stories': { const rows = db.select().from(schema.stories) .where(eq(schema.stories.published, true)) .orderBy(desc(schema.stories.sortOrder)).all() return rows.map(r => { const s = { ...r } try { s.sections = JSON.parse(r.sections) } catch {} try { s.keyMoments = JSON.parse(r.keyMoments) } catch {} return s }) } case 'news': case 'blog': { const rows = db.select().from(schema.articles) .where(eq(schema.articles.type, key)) .orderBy(desc(schema.articles.createdAt)).all() return rows.map(r => { const a = { ...r } try { a.tags = JSON.parse(r.tags) } catch {} return a }) } } return null } const ENTITY_KEYS = ['reviews','faq','gallery','stories','news','blog'] export default defineEventHandler(async (event) => { const key = getRouterParam(event, 'key') const db = useDB() const item = db.select().from(schema.siteContent) .where(eq(schema.siteContent.key, key)).get() const siteData = item ? JSON.parse(item.data) : null if (ENTITY_KEYS.includes(key)) { const result = buildFromEntityTable(db, key, siteData) if (result) { setHeader(event, 'Cache-Control', 'public, max-age=60') return result } } if (!siteData) { throw createError({ statusCode: 404, message: `未找到配置项: ${key}` }) } setHeader(event, 'Cache-Control', 'public, max-age=60') return siteData })