初次提交
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { db } from '~/drizzle/db'
|
||||
import { expectedPlayDates } from '~/drizzle/schema'
|
||||
import { eq } from 'drizzle-orm'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = event.context.user
|
||||
|
||||
if (!user || (user.role !== 'ADMIN' && user.role !== 'SUPER_ADMIN')) {
|
||||
throw createError({ statusCode: 403, message: '权限不足' })
|
||||
}
|
||||
|
||||
const idParam = event.context.params?.id
|
||||
if (!idParam) {
|
||||
throw createError({ statusCode: 400, message: '无效的ID' })
|
||||
}
|
||||
const id = Number(idParam)
|
||||
if (isNaN(id)) {
|
||||
throw createError({ statusCode: 400, message: '无效的ID' })
|
||||
}
|
||||
|
||||
try {
|
||||
await db.delete(expectedPlayDates).where(eq(expectedPlayDates.id, id))
|
||||
return { success: true }
|
||||
} catch (e: any) {
|
||||
throw createError({ statusCode: 500, message: e.message || '删除失败' })
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,95 @@
|
||||
import { db } from '~/drizzle/db'
|
||||
import { expectedPlayDates, songs } from '~/drizzle/schema'
|
||||
import { desc, eq, and } from 'drizzle-orm'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const method = event.node.req.method
|
||||
const user = event.context.user
|
||||
|
||||
if (!user || (user.role !== 'ADMIN' && user.role !== 'SUPER_ADMIN')) {
|
||||
throw createError({ statusCode: 403, message: '权限不足' })
|
||||
}
|
||||
|
||||
if (method === 'GET') {
|
||||
const dates = await db.select().from(expectedPlayDates).orderBy(desc(expectedPlayDates.date))
|
||||
const result = []
|
||||
|
||||
for (const d of dates) {
|
||||
const dateObj = new Date(d.date)
|
||||
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
|
||||
const weekday = weekdays[dateObj.getDay()]
|
||||
|
||||
let availableSeqs: number[] = []
|
||||
if (d.availableSequences) {
|
||||
availableSeqs = d.availableSequences.split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n))
|
||||
}
|
||||
|
||||
const takenSongs = await db.select({
|
||||
sequence: songs.expectedPlaySequence,
|
||||
title: songs.title,
|
||||
artist: songs.artist,
|
||||
requesterId: songs.requesterId
|
||||
})
|
||||
.from(songs)
|
||||
.where(
|
||||
and(
|
||||
eq(songs.expectedPlayDate, d.date),
|
||||
eq(songs.played, false)
|
||||
)
|
||||
)
|
||||
|
||||
const takenSeqs = new Set(takenSongs.map(s => s.sequence).filter(seq => seq !== null))
|
||||
const takenDetails: Record<number, any> = {}
|
||||
takenSongs.forEach(s => {
|
||||
if (s.sequence !== null) {
|
||||
takenDetails[s.sequence] = { title: s.title, artist: s.artist }
|
||||
}
|
||||
})
|
||||
|
||||
const freeSeqs = availableSeqs.filter(seq => !takenSeqs.has(seq))
|
||||
|
||||
result.push({
|
||||
...d,
|
||||
weekday,
|
||||
allSequences: availableSeqs.sort((a, b) => a - b),
|
||||
takenSequences: Array.from(takenSeqs).sort((a, b) => a - b),
|
||||
takenDetails,
|
||||
freeSequences: freeSeqs.sort((a, b) => a - b),
|
||||
isFull: freeSeqs.length === 0
|
||||
})
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
if (method === 'POST') {
|
||||
const body = await readBody(event)
|
||||
const { date, availableSequences } = body
|
||||
|
||||
if (!date || !availableSequences) {
|
||||
throw createError({ statusCode: 400, message: '日期和序号不能为空' })
|
||||
}
|
||||
|
||||
try {
|
||||
// 检查是否存在
|
||||
const existing = await db.select().from(expectedPlayDates).where(eq(expectedPlayDates.date, date))
|
||||
|
||||
if (existing.length > 0) {
|
||||
// 更新
|
||||
const result = await db.update(expectedPlayDates)
|
||||
.set({ availableSequences })
|
||||
.where(eq(expectedPlayDates.date, date))
|
||||
.returning()
|
||||
return result[0]
|
||||
} else {
|
||||
// 新增
|
||||
const result = await db.insert(expectedPlayDates)
|
||||
.values({ date, availableSequences })
|
||||
.returning()
|
||||
return result[0]
|
||||
}
|
||||
} catch (e: any) {
|
||||
throw createError({ statusCode: 500, message: e.message || '保存失败' })
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user