18 lines
1.2 KiB
TypeScript
18 lines
1.2 KiB
TypeScript
import { isMediaReferenced, moveMediaFiles, serializeMedia, type MediaAssetRow } from '../../../utils/media'
|
|
import { useDatabase } from '../../../utils/db'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = await requireAdmin(event)
|
|
const id = Number(getRouterParam(event, 'id'))
|
|
if (!Number.isSafeInteger(id) || id < 1) throw createError({ statusCode: 400, statusMessage: '无效的素材编号' })
|
|
const db = useDatabase()
|
|
const row = db.prepare("SELECT * FROM media_assets WHERE id = ? AND status = 'active'").get(id) as MediaAssetRow | undefined
|
|
if (!row) throw createError({ statusCode: 404, statusMessage: '素材不存在' })
|
|
if (isMediaReferenced(db, row)) throw createError({ statusCode: 409, statusMessage: '素材正在被草稿或已发布页面引用,不能删除' })
|
|
await moveMediaFiles(row, 'trash')
|
|
const timestamp = new Date().toISOString()
|
|
db.prepare("UPDATE media_assets SET status = 'trash', deleted_at = ?, updated_at = ? WHERE id = ?").run(timestamp, timestamp, id)
|
|
writeAuditLog(event, { operatorId: user.id, action: 'media.trash', entityType: 'media', entityKey: row.asset_key })
|
|
return { data: serializeMedia({ ...row, status: 'trash', deleted_at: timestamp, updated_at: timestamp }) }
|
|
})
|