Files
soul-yongping/app/api/user/purchase-status/route.ts

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 })
}
}