/** * 推荐码绑定API * 用于处理分享带来的推荐关系绑定 */ import { NextRequest, NextResponse } from 'next/server' import { query } from '@/lib/db' /** * POST - 绑定推荐关系 */ export async function POST(request: NextRequest) { try { const body = await request.json() const { userId, referralCode, openId } = body // 验证参数 const effectiveUserId = userId || (openId ? `user_${openId.slice(-8)}` : null) if (!effectiveUserId || !referralCode) { return NextResponse.json({ success: false, error: '用户ID和推荐码不能为空' }, { status: 400 }) } // 查找推荐人 const referrers = await query( 'SELECT id, nickname, referral_code FROM users WHERE referral_code = ?', [referralCode] ) as any[] if (referrers.length === 0) { return NextResponse.json({ success: false, error: '推荐码无效' }, { status: 400 }) } const referrer = referrers[0] // 不能自己推荐自己 if (referrer.id === effectiveUserId) { return NextResponse.json({ success: false, error: '不能使用自己的推荐码' }, { status: 400 }) } // 检查用户是否已有推荐人 const users = await query( 'SELECT id, referred_by FROM users WHERE id = ? OR open_id = ?', [effectiveUserId, openId || effectiveUserId] ) as any[] if (users.length === 0) { return NextResponse.json({ success: false, error: '用户不存在' }, { status: 400 }) } const user = users[0] if (user.referred_by) { return NextResponse.json({ success: false, error: '已绑定其他推荐人' }, { status: 400 }) } // 绑定推荐关系 await query( 'UPDATE users SET referred_by = ? WHERE id = ?', [referrer.id, user.id] ) // 更新推荐人的推广数量 await query( 'UPDATE users SET referral_count = referral_count + 1 WHERE id = ?', [referrer.id] ) // 创建推荐绑定记录 const bindingId = 'bind_' + Date.now().toString(36) + Math.random().toString(36).substr(2, 6) const expiryDate = new Date() expiryDate.setDate(expiryDate.getDate() + 30) // 30天有效期 try { await query(` INSERT INTO referral_bindings ( id, referrer_id, referee_id, referral_code, status, expiry_date ) VALUES (?, ?, ?, ?, 'active', ?) `, [bindingId, referrer.id, user.id, referralCode, expiryDate]) } catch (e) { console.log('[Referral Bind] 创建绑定记录失败(可能是重复绑定):', e) } console.log(`[Referral Bind] 成功: ${user.id} -> ${referrer.id} (${referralCode})`) return NextResponse.json({ success: true, message: '绑定成功', referrer: { id: referrer.id, nickname: referrer.nickname } }) } catch (error) { console.error('[Referral Bind] 错误:', error) return NextResponse.json({ success: false, error: '绑定失败: ' + (error as Error).message }, { status: 500 }) } } /** * GET - 查询推荐关系 */ export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url) const userId = searchParams.get('userId') const referralCode = searchParams.get('referralCode') try { if (referralCode) { // 查询推荐码对应的用户 const users = await query( 'SELECT id, nickname, avatar FROM users WHERE referral_code = ?', [referralCode] ) as any[] if (users.length === 0) { return NextResponse.json({ success: false, error: '推荐码无效' }, { status: 404 }) } return NextResponse.json({ success: true, referrer: users[0] }) } if (userId) { // 查询用户的推荐关系 const users = await query( 'SELECT id, referred_by FROM users WHERE id = ?', [userId] ) as any[] if (users.length === 0) { return NextResponse.json({ success: false, error: '用户不存在' }, { status: 404 }) } const user = users[0] // 如果有推荐人,获取推荐人信息 let referrer = null if (user.referred_by) { const referrers = await query( 'SELECT id, nickname, avatar FROM users WHERE id = ?', [user.referred_by] ) as any[] if (referrers.length > 0) { referrer = referrers[0] } } // 获取该用户推荐的人 const referees = await query( 'SELECT id, nickname, avatar, created_at FROM users WHERE referred_by = ?', [userId] ) as any[] return NextResponse.json({ success: true, referrer, referees, referralCount: referees.length }) } return NextResponse.json({ success: false, error: '请提供userId或referralCode参数' }, { status: 400 }) } catch (error) { console.error('[Referral Bind] GET错误:', error) return NextResponse.json({ success: false, error: '查询失败: ' + (error as Error).message }, { status: 500 }) } }