32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
import { defineEventHandler, getQuery } from 'h3'
|
|
import { db } from '~/drizzle/db'
|
|
import { scheduleSongPool } from '~/drizzle/schema'
|
|
import { inArray } from 'drizzle-orm'
|
|
import { createApiError } from '~~/server/utils/apiError'
|
|
import { SERVER_ERROR_CODES } from '~~/server/config/constants'
|
|
import { requireSongAdmin } from '~~/server/utils/requireSongAdmin'
|
|
import { fetchPoolCount } from '~~/server/utils/scheduleSongPool'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
requireSongAdmin(event)
|
|
|
|
const query = getQuery(event)
|
|
const songIdsRaw = query.songIds
|
|
|
|
let songIds: number[] = []
|
|
if (typeof songIdsRaw === 'string') {
|
|
songIds = songIdsRaw.split(',').map((s) => Number.parseInt(s.trim(), 10)).filter((n) => Number.isInteger(n) && n > 0)
|
|
} else if (Array.isArray(songIdsRaw)) {
|
|
songIds = songIdsRaw.map((s) => Number.parseInt(String(s).trim(), 10)).filter((n) => Number.isInteger(n) && n > 0)
|
|
}
|
|
|
|
if (songIds.length === 0) {
|
|
throw createApiError(400, SERVER_ERROR_CODES.COMMON_INVALID_PARAMS, 'songIds 必须为非空数组或逗号分隔字符串')
|
|
}
|
|
if (songIds.length > 1000) {
|
|
throw createApiError(400, SERVER_ERROR_CODES.COMMON_INVALID_PARAMS, 'songIds 数量不能超过 1000')
|
|
}
|
|
|
|
const result = await db.delete(scheduleSongPool).where(inArray(scheduleSongPool.songId, songIds)).returning()
|
|
return { ok: true, removed: result.length, total: await fetchPoolCount() }
|
|
}) |