const { query } = require('../lib/db') const { ok, fail } = require('../lib/response') const { requireUser } = require('../lib/auth') const { writeLog } = require('../lib/log') const { getPhoneNumber } = require('../lib/wechat') function register(router) { router.get('/api/v1/user/profile', async ctx => { const user = await requireUser(ctx) if (!user) return fail(1001, 'invalid_token') const binds = await query('SELECT COUNT(*) AS total FROM bindings WHERE user_id = :user_id AND bind_status = 1', { user_id: user.user_id }) return ok({ user_id: String(user.user_id), nickname: user.nickname || '用户' + String(user.user_id), avatar: user.avatar || '', phone: user.phone || '', gender: user.gender || 0, bind_time: null, device_count: binds[0].total }) }) router.put('/api/v1/user/profile', async ctx => { const user = await requireUser(ctx) if (!user) return fail(1001, 'invalid_token') await query('UPDATE users SET nickname = COALESCE(:nickname, nickname), avatar = COALESCE(:avatar, avatar), gender = COALESCE(:gender, gender) WHERE user_id = :user_id', { user_id: user.user_id, nickname: ctx.body.nickname || null, avatar: ctx.body.avatar || ctx.body.avatar_url || null, gender: ctx.body.gender === undefined ? null : ctx.body.gender }) await writeLog({ user_id: user.user_id, action: 'user_update', detail: '更新用户资料', ip: ctx.ip }) return ok({ message: 'success' }) }) router.post('/api/v1/user/phone', async ctx => { const user = await requireUser(ctx) if (!user) return fail(1001, 'invalid_token') const code = String(ctx.body.code || '').trim() if (!code) return fail(2001, 'phone code required') const phoneInfo = await getPhoneNumber(code) if (!phoneInfo || !phoneInfo.phoneNumber) return fail(2001, 'phone authorization failed') await query('UPDATE users SET phone = :phone WHERE user_id = :user_id', { user_id: user.user_id, phone: phoneInfo.phoneNumber }) await writeLog({ user_id: user.user_id, action: 'user_phone_bind', detail: '授权手机号', ip: ctx.ip }) return ok({ phone: phoneInfo.phoneNumber, pure_phone_number: phoneInfo.purePhoneNumber || '', country_code: phoneInfo.countryCode || '' }) }) } module.exports = register