74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
/**
|
|
* 绑定数据API - 从真实数据库查询
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server'
|
|
import { query } from '@/lib/db'
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const { searchParams } = new URL(request.url)
|
|
const userId = searchParams.get('userId')
|
|
|
|
let sql = `
|
|
SELECT
|
|
rb.id,
|
|
rb.referrer_id,
|
|
rb.referee_id,
|
|
rb.referral_code as referrer_code,
|
|
rb.status,
|
|
rb.binding_date as bound_at,
|
|
rb.expiry_date as expires_at,
|
|
rb.conversion_date,
|
|
rb.commission_amount,
|
|
u1.nickname as referrer_name,
|
|
u2.nickname as referee_nickname,
|
|
u2.phone as referee_phone,
|
|
DATEDIFF(rb.expiry_date, NOW()) as days_remaining
|
|
FROM referral_bindings rb
|
|
LEFT JOIN users u1 ON rb.referrer_id = u1.id
|
|
LEFT JOIN users u2 ON rb.referee_id = u2.id
|
|
`
|
|
|
|
let params: any[] = []
|
|
if (userId) {
|
|
sql += ' WHERE rb.referrer_id = ?'
|
|
params.push(userId)
|
|
}
|
|
|
|
sql += ' ORDER BY rb.binding_date DESC LIMIT 500'
|
|
|
|
const bindings = await query(sql, params) as any[]
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
bindings: bindings.map((b: any) => ({
|
|
id: b.id,
|
|
referrer_id: b.referrer_id,
|
|
referrer_name: b.referrer_name || '未知',
|
|
referrer_code: b.referrer_code,
|
|
referee_id: b.referee_id,
|
|
referee_phone: b.referee_phone,
|
|
referee_nickname: b.referee_nickname || '用户' + (b.referee_id || '').slice(-4),
|
|
bound_at: b.bound_at,
|
|
expires_at: b.expires_at,
|
|
status: b.status,
|
|
days_remaining: Math.max(0, parseInt(b.days_remaining) || 0),
|
|
commission: parseFloat(b.commission_amount) || 0,
|
|
order_amount: 0, // 需要的话可以关联 orders 表计算
|
|
source: 'miniprogram'
|
|
})),
|
|
total: bindings.length
|
|
})
|
|
|
|
} catch (error) {
|
|
console.error('[Distribution API] 查询失败:', error)
|
|
// 表可能不存在,返回空数组
|
|
return NextResponse.json({
|
|
success: true,
|
|
bindings: [],
|
|
total: 0
|
|
})
|
|
}
|
|
}
|