feat: align with upstream 1.5.9.9
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import { createError, defineEventHandler, getQuery } from 'h3'
|
||||
import { db } from '~/drizzle/db'
|
||||
import { schedules, songs, users } from '~/drizzle/schema'
|
||||
import { desc, eq } from 'drizzle-orm'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
// 检查认证和权限
|
||||
const user = event.context.user
|
||||
if (!user || !['SONG_ADMIN', 'ADMIN', 'SUPER_ADMIN'].includes(user.role)) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
message: '需要管理员权限'
|
||||
})
|
||||
}
|
||||
|
||||
const query = getQuery(event)
|
||||
const limit = parseInt(query.limit as string) || 10
|
||||
|
||||
try {
|
||||
// 获取最近的活动记录
|
||||
const activities: Array<{
|
||||
id: string
|
||||
type: string
|
||||
title: string
|
||||
description: string
|
||||
createdAt: Date
|
||||
}> = []
|
||||
|
||||
// 获取最近的歌曲活动
|
||||
const recentSongs = await db
|
||||
.select({
|
||||
id: songs.id,
|
||||
title: songs.title,
|
||||
createdAt: songs.createdAt,
|
||||
requesterName: users.name,
|
||||
requesterUsername: users.username
|
||||
})
|
||||
.from(songs)
|
||||
.leftJoin(users, eq(songs.requesterId, users.id))
|
||||
.orderBy(desc(songs.createdAt))
|
||||
.limit(5)
|
||||
|
||||
recentSongs.forEach((song) => {
|
||||
activities.push({
|
||||
id: `song-${song.id}`,
|
||||
type: 'song',
|
||||
title: '新歌曲投稿',
|
||||
description: `${song.requesterName || song.requesterUsername || '用户'} 投稿了《${song.title}》`,
|
||||
createdAt: song.createdAt
|
||||
})
|
||||
})
|
||||
|
||||
// 移除了新用户注册活动记录
|
||||
|
||||
// 获取最近的排期活动
|
||||
const recentSchedules = await db
|
||||
.select({
|
||||
id: schedules.id,
|
||||
createdAt: schedules.createdAt,
|
||||
songTitle: songs.title,
|
||||
songArtist: songs.artist
|
||||
})
|
||||
.from(schedules)
|
||||
.leftJoin(songs, eq(schedules.songId, songs.id))
|
||||
.orderBy(desc(schedules.createdAt))
|
||||
.limit(3)
|
||||
|
||||
recentSchedules.forEach((schedule) => {
|
||||
activities.push({
|
||||
id: `schedule-${schedule.id}`,
|
||||
type: 'schedule',
|
||||
title: '排期更新',
|
||||
description: `《${schedule.songTitle}》已安排到播放排期`,
|
||||
createdAt: schedule.createdAt
|
||||
})
|
||||
})
|
||||
|
||||
// 按时间排序并限制数量
|
||||
const sortedActivities = activities
|
||||
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
|
||||
.slice(0, limit)
|
||||
|
||||
return {
|
||||
activities: sortedActivities,
|
||||
total: sortedActivities.length
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取活动记录失败:', error)
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
message: '获取活动记录失败'
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user