import { eq } from 'drizzle-orm' import { db } from '~/drizzle/db' import { systemSettings } from '~/drizzle/schema' import { CacheService } from '~~/server/services/cacheService' import { kuGouQrLoginCheck } from '~~/server/services/kugouService' export default defineEventHandler(async (event) => { const user = event.context.user if (!user) throw createError({ statusCode: 401, message: '未登录' }) if (!['ADMIN', 'SUPER_ADMIN'].includes(user.role)) throw createError({ statusCode: 403, message: '仅管理员可绑定酷狗账号' }) const body = await readBody(event) const { qr_id, login_id, key, cookie } = body || {} if (!(qr_id || login_id || key)) { throw createError({ statusCode: 400, message: '缺少 qr_id 或 key' }) } const res = await kuGouQrLoginCheck({ qr_id, login_id, key, cookie }) const state = Number(res?.data?.status ?? 0) const token = (res as any)?.data?.token || (res as any)?.token || '' const kugouCookie = (res as any)?.data?.cookie || (res as any)?.cookie || cookie || '' const kugouUser = (res as any)?.data?.userinfo || (res as any)?.userinfo || null let bound = false if (state === 1 && (token || kugouCookie)) { const rows = await db.select().from(systemSettings).limit(1) const patch: Record = { kugouAdminToken: token || null, kugouAdminCookie: kugouCookie || null, kugouAdminUser: kugouUser || null, kugouAdminBoundAt: new Date(), updatedAt: new Date(), } if (!rows[0]) { await db.insert(systemSettings).values(patch as any) } else { await db.update(systemSettings).set(patch).where(eq(systemSettings.id, rows[0].id)) } try { const cs = CacheService.getInstance() await cs.setSystemSettings?.({ ...(rows[0] || {}), ...patch }) } catch {} bound = true } return { ok: true, state, // 0 未扫码 / 1 已完成 / 2 已扫码未确认 / -1 过期 bound, user: kugouUser, hint: state === 0 ? '请用酷狗 App 扫二维码' : state === 2 ? '扫码成功,请在手机端确认登录' : state === 1 ? '绑定成功' : state === -1 ? '二维码已过期,请刷新重试' : res?.error || '等待中', raw: res, } })