72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
import db from '../../utils/db.js'
|
|
import { verifyToken, extractToken } from '../../utils/jwt.js'
|
|
import { deleteImage } from '../../utils/image.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// 验证登录
|
|
const token = extractToken(event)
|
|
if (!token) {
|
|
throw createError({
|
|
statusCode: 401,
|
|
message: '请先登录'
|
|
})
|
|
}
|
|
|
|
const user = await verifyToken(token)
|
|
if (!user) {
|
|
throw createError({
|
|
statusCode: 401,
|
|
message: 'Token 无效或已过期'
|
|
})
|
|
}
|
|
|
|
// 获取所有已软删除的图片
|
|
const deletedImages = await db.images.find({ isDeleted: true })
|
|
|
|
if (deletedImages.length === 0) {
|
|
return {
|
|
success: true,
|
|
message: '没有需要硬删除的图片',
|
|
data: { deletedCount: 0 }
|
|
}
|
|
}
|
|
|
|
let deletedCount = 0
|
|
let errors = []
|
|
|
|
for (const image of deletedImages) {
|
|
try {
|
|
// 删除物理文件
|
|
deleteImage(image.filename)
|
|
|
|
// 从数据库删除记录
|
|
await db.images.remove({ _id: image._id })
|
|
deletedCount++
|
|
} catch (err) {
|
|
console.error(`删除图片失败 ${image.uuid}:`, err)
|
|
errors.push(image.uuid)
|
|
}
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
message: `成功硬删除 ${deletedCount} 张图片`,
|
|
data: {
|
|
deletedCount,
|
|
errors: errors.length > 0 ? errors : undefined
|
|
}
|
|
}
|
|
} catch (error) {
|
|
if (error.statusCode) {
|
|
throw error
|
|
}
|
|
|
|
console.error('[Settings] 硬删除图片失败:', error)
|
|
throw createError({
|
|
statusCode: 500,
|
|
message: '硬删除图片失败'
|
|
})
|
|
}
|
|
})
|