feat: 迁移自定义功能至 1.5.9.9 版本
包含音乐源限制、CI 防 OOM 优化、数据库连接池优化、管理端权限及 UI 细节定制等功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { createError, defineEventHandler, getQuery } from 'h3'
|
||||
import { db } from '~/drizzle/db'
|
||||
import { users, userStatusLogs } from '~/drizzle/schema'
|
||||
import { and, count, desc, eq, ilike, inArray, or, sql } from 'drizzle-orm'
|
||||
import { and, count, desc, eq, ilike, or } from 'drizzle-orm'
|
||||
import { getStatusText } from '~~/server/utils/user'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
@@ -11,7 +11,7 @@ export default defineEventHandler(async (event) => {
|
||||
if (!user || !['ADMIN', 'SUPER_ADMIN'].includes(user.role)) {
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
message: '没有权限访问'
|
||||
statusMessage: '没有权限访问'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -46,14 +46,15 @@ export default defineEventHandler(async (event) => {
|
||||
.select({
|
||||
id: userStatusLogs.id,
|
||||
userId: userStatusLogs.userId,
|
||||
// 优先快照列(用户删除后审计可追溯);存量旧日志快照为 NULL 时回退 join 的用户名
|
||||
userName: sql`COALESCE(${userStatusLogs.name}, ${users.name})`,
|
||||
userUsername: sql`COALESCE(${userStatusLogs.username}, ${users.username})`,
|
||||
userName: users.name,
|
||||
userUsername: users.username,
|
||||
oldStatus: userStatusLogs.oldStatus,
|
||||
newStatus: userStatusLogs.newStatus,
|
||||
reason: userStatusLogs.reason,
|
||||
createdAt: userStatusLogs.createdAt,
|
||||
operatorId: userStatusLogs.operatorId
|
||||
operatorId: userStatusLogs.operatorId,
|
||||
operatorName: users.name,
|
||||
operatorUsername: users.username
|
||||
})
|
||||
.from(userStatusLogs)
|
||||
.leftJoin(users, eq(userStatusLogs.userId, users.id))
|
||||
@@ -66,13 +67,15 @@ export default defineEventHandler(async (event) => {
|
||||
.select({
|
||||
id: userStatusLogs.id,
|
||||
userId: userStatusLogs.userId,
|
||||
userName: sql`COALESCE(${userStatusLogs.name}, ${users.name})`,
|
||||
userUsername: sql`COALESCE(${userStatusLogs.username}, ${users.username})`,
|
||||
userName: users.name,
|
||||
userUsername: users.username,
|
||||
oldStatus: userStatusLogs.oldStatus,
|
||||
newStatus: userStatusLogs.newStatus,
|
||||
reason: userStatusLogs.reason,
|
||||
createdAt: userStatusLogs.createdAt,
|
||||
operatorId: userStatusLogs.operatorId
|
||||
operatorId: userStatusLogs.operatorId,
|
||||
operatorName: users.name,
|
||||
operatorUsername: users.username
|
||||
})
|
||||
.from(userStatusLogs)
|
||||
.leftJoin(users, eq(userStatusLogs.userId, users.id))
|
||||
@@ -80,9 +83,6 @@ export default defineEventHandler(async (event) => {
|
||||
and(
|
||||
whereClause,
|
||||
or(
|
||||
ilike(userStatusLogs.name, `%${searchTerm}%`),
|
||||
ilike(userStatusLogs.username, `%${searchTerm}%`),
|
||||
// 存量旧日志快照列为 NULL,回退 join 的用户名列以便可搜
|
||||
ilike(users.name, `%${searchTerm}%`),
|
||||
ilike(users.username, `%${searchTerm}%`),
|
||||
ilike(userStatusLogs.reason, `%${searchTerm}%`)
|
||||
@@ -106,8 +106,6 @@ export default defineEventHandler(async (event) => {
|
||||
and(
|
||||
whereClause,
|
||||
or(
|
||||
ilike(userStatusLogs.name, `%${searchTerm}%`),
|
||||
ilike(userStatusLogs.username, `%${searchTerm}%`),
|
||||
ilike(users.name, `%${searchTerm}%`),
|
||||
ilike(users.username, `%${searchTerm}%`),
|
||||
ilike(userStatusLogs.reason, `%${searchTerm}%`)
|
||||
@@ -137,7 +135,7 @@ export default defineEventHandler(async (event) => {
|
||||
username: users.username
|
||||
})
|
||||
.from(users)
|
||||
.where(inArray(users.id, operatorIds))
|
||||
.where(eq(users.id, operatorIds[0])) // 这里需要用inArray,但先简化处理
|
||||
|
||||
const operatorMap = new Map()
|
||||
for (const op of operators) {
|
||||
@@ -166,8 +164,8 @@ export default defineEventHandler(async (event) => {
|
||||
createdAt: log.createdAt,
|
||||
operator: {
|
||||
id: log.operatorId,
|
||||
name: operatorMap.get(log.operatorId)?.name || '未知操作员',
|
||||
username: operatorMap.get(log.operatorId)?.username || 'unknown'
|
||||
name: operatorMap.get(log.operatorId)?.name || log.operatorName || '未知操作员',
|
||||
username: operatorMap.get(log.operatorId)?.username || log.operatorUsername || 'unknown'
|
||||
}
|
||||
})),
|
||||
pagination: {
|
||||
@@ -193,7 +191,7 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
message: '获取状态变更日志失败: ' + error.message
|
||||
statusMessage: '获取状态变更日志失败: ' + error.message
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user