Files
guanwang/server/api/admin/site/index.put.ts

24 lines
1.3 KiB
TypeScript

import { requireAdmin } from '../../../utils/auth'
import { writeAuditLog } from '../../../utils/audit'
import { useDatabase } from '../../../utils/db'
import { sanitizeRichText } from '../../../utils/rich-text'
import { siteDocumentSchema } from '../../../utils/site-schema'
export default defineEventHandler(async (event) => {
const user = await requireAdmin(event)
const parsed = siteDocumentSchema.safeParse(await readBody(event))
if (!parsed.success) {
throw createError({ statusCode: 422, statusMessage: '内容校验失败', data: { issues: parsed.error.issues } })
}
const document = parsed.data
document.products.forEach(product => { product.content = sanitizeRichText(product.content) })
document.articles.forEach(article => { article.content = sanitizeRichText(article.content) })
document.team.forEach(member => { member.summary = sanitizeRichText(member.summary) })
const timestamp = new Date().toISOString()
const db = useDatabase()
db.prepare('UPDATE site_documents SET draft_json = ?, updated_by = ?, updated_at = ? WHERE document_key = ?')
.run(JSON.stringify(document), user.id, timestamp, 'website')
writeAuditLog(event, { operatorId: user.id, action: 'save_draft', entityType: 'site_document', entityKey: 'website' })
return { data: document, updatedAt: timestamp }
})