import { db, eq } from '~/drizzle/db' import { schedules } from '~/drizzle/schema' import { cacheService } from '~~/server/services/cacheService' export default defineEventHandler(async (event) => { // 验证用户认证和权限 const user = event.context.user if (!user || !['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(user.role)) { throw createError({ statusCode: 403, statusMessage: '需要歌曲管理员及以上权限' }) } try { const body = await readBody(event) // 注意:不要写成 const { schedules } = body —— 那会在本作用域内遮蔽上面导入的 // Drizzle 表对象,导致下面 db.update(schedules) 实际拿到的是请求体数组,接口必然报错。 const scheduleItems = body?.schedules if (!scheduleItems || !Array.isArray(scheduleItems) || scheduleItems.length === 0) { throw createError({ statusCode: 400, statusMessage: '缺少排期数据' }) } // 批量更新排期顺序 const results = await Promise.all( scheduleItems.map(async (item) => { return db .update(schedules) .set({ sequence: item.sequence }) .where(eq(schedules.id, Number(item.id))) }) ) // 清除排期相关缓存 try { await cacheService.clearSchedulesCache() await cacheService.clearSongsCache() console.log('[Cache] 排期缓存和歌曲列表缓存已清除(更新排期顺序)') } catch (cacheError) { console.error('[Cache] 清除缓存失败:', cacheError) } return { success: true, count: results.length } } catch (error: any) { console.error('更新排期顺序失败:', error) throw createError({ statusCode: 500, statusMessage: error.message || '更新排期顺序失败' }) } })