/** * 订单管理接口 * 开发: 卡若 * 技术支持: 存客宝 * * GET /api/orders - 管理后台:返回全部订单(无 userId) * GET /api/orders?userId= - 按用户返回订单 */ import { type NextRequest, NextResponse } from "next/server" import { query } from "@/lib/db" function rowToOrder(row: Record) { return { id: row.id, orderSn: row.order_sn, userId: row.user_id, openId: row.open_id, productType: row.product_type, productId: row.product_id, amount: parseFloat(row.amount as string) || 0, // 确保是数字类型 description: row.description, status: row.status, transactionId: row.transaction_id, payTime: row.pay_time, referrerId: row.referrer_id ?? null, referralCode: row.referral_code ?? null, createdAt: row.created_at, updatedAt: row.updated_at, // 新增:购买者信息 userNickname: row.user_nickname ?? null, userAvatar: row.user_avatar ?? null, // 新增:章节信息 bookName: '《底层逻辑》', // 书名(固定) chapterTitle: row.chapter_title ?? null, // 章标题 sectionTitle: row.section_title ?? null, // 节标题 } } export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url) const userId = searchParams.get("userId") let rows: Record[] = [] try { if (userId) { // 按用户查询订单(JOIN users 表获取用户信息 + chapters 表获取章节信息) rows = (await query( `SELECT o.*, u.nickname as user_nickname, u.avatar as user_avatar, c.chapter_title, c.section_title FROM orders o LEFT JOIN users u ON o.user_id = u.id LEFT JOIN chapters c ON o.product_id = c.id AND o.product_type = 'section' WHERE o.user_id = ? ORDER BY o.created_at DESC`, [userId] )) as Record[] } else { // 管理后台:无 userId 时返回全部订单(JOIN users + chapters 表) rows = (await query( `SELECT o.*, u.nickname as user_nickname, u.avatar as user_avatar, c.chapter_title, c.section_title FROM orders o LEFT JOIN users u ON o.user_id = u.id LEFT JOIN chapters c ON o.product_id = c.id AND o.product_type = 'section' ORDER BY o.created_at DESC` )) as Record[] } } catch (e) { console.error("[Karuo] Orders query error:", e) // 表可能未初始化,返回空列表 rows = [] } const orders = rows.map(rowToOrder) return NextResponse.json({ code: 0, message: "获取成功", data: orders, success: true, orders, }) } catch (error) { console.error("[Karuo] Get orders error:", error) return NextResponse.json({ code: 500, message: "服务器错误" }, { status: 500 }) } }