Files
BYW-VoiceHub/VoiceHub-main/server/api/site-config.get.ts
T
Henry_Du 4ce4649aaf
Build VoiceHub FPK / build-fpk (push) Failing after 56m5s
Build and Push Docker Image / build-and-push (push) Canceled after 1h9m35s
初次提交
2026-09-06 08:19:02 +08:00

102 lines
2.9 KiB
TypeScript

import { db } from '~/drizzle/db'
import { systemSettings } from '~/drizzle/schema'
import { cacheService } from '../services/cacheService'
import { isRedisReady } from '../utils/redis'
// 过滤敏感字段,只返回公开配置
const publicFields = [
'siteTitle',
'siteLogoUrl',
'schoolLogoHomeUrl',
'schoolLogoPrintUrl',
'siteDescription',
'submissionGuidelines',
'icpNumber',
'gonganNumber',
'enablePlayTimeSelection',
'enableSubmissionLimit',
'dailySubmissionLimit',
'weeklySubmissionLimit',
'monthlySubmissionLimit',
'showBlacklistKeywords',
'hideStudentInfo',
'enableReplayRequests',
'enableCollaborativeSubmission',
'enableSubmissionRemarks',
'enableRequestTimeLimitation',
'forceBlockAllRequests',
'smtpEnabled'
]
const filterPublicSettings = (data: any) => {
if (!data) {
return {}
}
const result: Record<string, any> = {}
for (const key of publicFields) {
if (Object.prototype.hasOwnProperty.call(data, key)) {
result[key] = data[key]
}
}
return result
}
export default defineEventHandler(async (event) => {
try {
// 优先从Redis缓存获取系统设置
if (isRedisReady()) {
const cachedSettings = await cacheService.getSystemSettings()
if (cachedSettings) {
console.log('[API] 系统设置缓存命中')
return filterPublicSettings(cachedSettings)
}
}
// 缓存未命中或Redis不可用,从数据库获取
const settingsResult = await db.select().from(systemSettings).limit(1)
let settings = settingsResult[0] || null
if (!settings) {
// 如果不存在,创建默认设置
const newSettings = await db
.insert(systemSettings)
.values({
enablePlayTimeSelection: false,
siteTitle: 'VoiceHub',
siteLogoUrl: '/favicon.ico',
schoolLogoHomeUrl: null,
schoolLogoPrintUrl: null,
siteDescription: '校园广播站点歌系统 - 让你的声音被听见',
submissionGuidelines: '请遵守校园规定,提交健康向上的歌曲。',
icpNumber: null,
enableSubmissionLimit: false,
dailySubmissionLimit: null,
weeklySubmissionLimit: null,
showBlacklistKeywords: false,
hideStudentInfo: true,
enableCollaborativeSubmission: true,
enableSubmissionRemarks: false
})
.returning()
settings = newSettings[0]
}
const publicSettings = filterPublicSettings(settings)
// 将结果缓存到Redis(如果可用)- 永久缓存
if (settings && isRedisReady()) {
await cacheService.setSystemSettings(settings)
console.log('[API] 系统设置已缓存到Redis')
}
return publicSettings
} catch (error) {
console.error('获取系统设置失败:', error)
throw createError({
statusCode: 500,
statusMessage: '获取系统设置失败'
})
}
})