73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
/**
|
|
* 查询用户购买状态 API
|
|
* 用于支付成功后刷新用户的购买记录
|
|
*
|
|
* GET /api/user/purchase-status?userId=xxx
|
|
*/
|
|
|
|
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')
|
|
|
|
if (!userId) {
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: '缺少 userId 参数'
|
|
}, { status: 400 })
|
|
}
|
|
|
|
// 1. 查询用户基本信息
|
|
const userRows = await query(`
|
|
SELECT
|
|
id, nickname, avatar, phone, wechat_id,
|
|
referral_code, has_full_book,
|
|
earnings, pending_earnings, referral_count
|
|
FROM users
|
|
WHERE id = ?
|
|
`, [userId]) as any[]
|
|
|
|
if (userRows.length === 0) {
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: '用户不存在'
|
|
}, { status: 404 })
|
|
}
|
|
|
|
const user = userRows[0]
|
|
|
|
// 2. 从 orders 表查询已购买的章节
|
|
const orderRows = await query(`
|
|
SELECT DISTINCT product_id
|
|
FROM orders
|
|
WHERE user_id = ?
|
|
AND status = 'paid'
|
|
AND product_type = 'section'
|
|
`, [userId]) as any[]
|
|
|
|
const purchasedSections = orderRows.map((row: any) => row.product_id).filter(Boolean)
|
|
|
|
// 3. 返回完整购买状态
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: {
|
|
hasFullBook: user.has_full_book || false,
|
|
purchasedSections,
|
|
purchasedCount: purchasedSections.length,
|
|
earnings: parseFloat(user.earnings) || 0,
|
|
pendingEarnings: parseFloat(user.pending_earnings) || 0,
|
|
}
|
|
})
|
|
|
|
} catch (error) {
|
|
console.error('[PurchaseStatus] 查询失败:', error)
|
|
return NextResponse.json({
|
|
success: false,
|
|
error: '查询购买状态失败'
|
|
}, { status: 500 })
|
|
}
|
|
}
|