49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { createError, defineEventHandler, readBody } from 'h3'
|
|
import { deleteCardCodesByIds } from '~~/server/services/cardCodeDeleteService'
|
|
|
|
const parseIds = (body: any): number[] => {
|
|
const rawIds = Array.isArray(body?.ids) ? body.ids : body?.id !== undefined ? [body.id] : []
|
|
return Array.from(new Set(
|
|
rawIds
|
|
.filter((id: any) => (typeof id === 'number' || typeof id === 'string') && id !== '')
|
|
.map((id: any) => Number(id))
|
|
.filter((id: number) => Number.isInteger(id) && id > 0)
|
|
))
|
|
}
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = event.context.user
|
|
if (!user) {
|
|
throw createError({ statusCode: 401, message: '未授权访问' })
|
|
}
|
|
if (!['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(user.role)) {
|
|
throw createError({ statusCode: 403, message: '权限不足' })
|
|
}
|
|
|
|
const body = await readBody(event).catch(() => ({})) ?? {}
|
|
const ids = parseIds(body)
|
|
if (!ids.length) {
|
|
throw createError({ statusCode: 400, message: '缺少有效点歌券ID' })
|
|
}
|
|
if (ids.length > 500) {
|
|
throw createError({ statusCode: 400, message: '单次最多删除 500 个点歌券' })
|
|
}
|
|
|
|
try {
|
|
const deletedRows = await deleteCardCodesByIds(ids)
|
|
return {
|
|
success: true,
|
|
message: '点歌券删除成功',
|
|
data: {
|
|
cardCodes: deletedRows,
|
|
deleted: deletedRows.length,
|
|
requested: ids.length
|
|
}
|
|
}
|
|
} catch (err: any) {
|
|
if (err.statusCode) throw err
|
|
console.error('删除点歌券失败', err)
|
|
throw createError({ statusCode: 500, message: '删除点歌券失败' })
|
|
}
|
|
})
|