87 lines
2.4 KiB
TypeScript
87 lines
2.4 KiB
TypeScript
import { createError, defineEventHandler } from 'h3'
|
|
import { db } from '~/drizzle/db'
|
|
import { notificationSettings, users } from '~/drizzle/schema'
|
|
import { eq } from 'drizzle-orm'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
// 检查用户认证
|
|
const user = event.context.user
|
|
|
|
if (!user) {
|
|
throw createError({
|
|
statusCode: 401,
|
|
message: '需要登录才能获取通知设置'
|
|
})
|
|
}
|
|
|
|
try {
|
|
// 获取用户信息(包含meowNickname和邮箱信息)
|
|
const userInfoResult = await db
|
|
.select({
|
|
meowNickname: users.meowNickname,
|
|
email: users.email,
|
|
emailVerified: users.emailVerified
|
|
})
|
|
.from(users)
|
|
.where(eq(users.id, user.id))
|
|
.limit(1)
|
|
|
|
const userInfo = userInfoResult[0]
|
|
|
|
// 获取用户的通知设置,如果不存在则创建默认设置
|
|
const dbSettingsResult = await db
|
|
.select()
|
|
.from(notificationSettings)
|
|
.where(eq(notificationSettings.userId, user.id))
|
|
.limit(1)
|
|
|
|
let dbSettings: any = dbSettingsResult[0]
|
|
|
|
if (!dbSettings) {
|
|
// 创建默认设置
|
|
const insertResult = await db
|
|
.insert(notificationSettings)
|
|
.values({
|
|
userId: user.id,
|
|
enabled: true,
|
|
songRequestEnabled: true,
|
|
songVotedEnabled: true,
|
|
songPlayedEnabled: true,
|
|
refreshInterval: 60,
|
|
songVotedThreshold: 1
|
|
})
|
|
.returning()
|
|
|
|
dbSettings = insertResult[0]
|
|
}
|
|
|
|
// 转换为前端期望的格式(包含用户邮箱状态)
|
|
const settings = {
|
|
id: dbSettings.id,
|
|
userId: dbSettings.userId,
|
|
songSelectedNotify: dbSettings.songRequestEnabled,
|
|
songPlayedNotify: dbSettings.songPlayedEnabled,
|
|
songVotedNotify: dbSettings.songVotedEnabled,
|
|
systemNotify: dbSettings.enabled,
|
|
refreshInterval: dbSettings.refreshInterval,
|
|
songVotedThreshold: dbSettings.songVotedThreshold,
|
|
meowUserId: userInfo?.meowNickname || '',
|
|
// 邮件通知总开关移除:以邮箱绑定状态为准
|
|
// 用户邮箱信息
|
|
userEmail: userInfo?.email || '',
|
|
emailVerified: userInfo?.emailVerified || false
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
data: settings
|
|
}
|
|
} catch (err) {
|
|
console.error('获取通知设置失败:', err)
|
|
throw createError({
|
|
statusCode: 500,
|
|
message: '获取通知设置失败'
|
|
})
|
|
}
|
|
})
|