Files
soul/app/api/admin/payment/route.ts

183 lines
4.2 KiB
TypeScript

// app/api/admin/payment/route.ts
// 付费模块管理API
import { NextRequest, NextResponse } from 'next/server'
// 模拟订单数据
let orders = [
{
id: 'ORDER_001',
userId: 'user_001',
userName: '张三',
amount: 9.9,
status: 'paid',
paymentMethod: 'wechat',
createdAt: new Date('2025-01-10').toISOString(),
paidAt: new Date('2025-01-10').toISOString()
},
{
id: 'ORDER_002',
userId: 'user_002',
userName: '李四',
amount: 10.9,
status: 'paid',
paymentMethod: 'wechat',
createdAt: new Date('2025-01-11').toISOString(),
paidAt: new Date('2025-01-11').toISOString()
}
]
// GET: 获取订单列表
export async function GET(req: NextRequest) {
const { searchParams } = new URL(req.url)
const status = searchParams.get('status')
const page = parseInt(searchParams.get('page') || '1')
const pageSize = parseInt(searchParams.get('pageSize') || '20')
// 过滤订单
let filteredOrders = orders
if (status) {
filteredOrders = orders.filter(order => order.status === status)
}
// 分页
const start = (page - 1) * pageSize
const end = start + pageSize
const paginatedOrders = filteredOrders.slice(start, end)
// 统计数据
const stats = {
total: orders.length,
paid: orders.filter(o => o.status === 'paid').length,
pending: orders.filter(o => o.status === 'pending').length,
refunded: orders.filter(o => o.status === 'refunded').length,
totalRevenue: orders
.filter(o => o.status === 'paid')
.reduce((sum, o) => sum + o.amount, 0)
}
return NextResponse.json({
success: true,
orders: paginatedOrders,
pagination: {
page,
pageSize,
total: filteredOrders.length,
totalPages: Math.ceil(filteredOrders.length / pageSize)
},
stats
})
}
// POST: 创建订单(手动)
export async function POST(req: NextRequest) {
try {
const body = await req.json()
const { userId, userName, amount, note } = body
if (!userId || !amount) {
return NextResponse.json(
{ error: '用户ID和金额不能为空' },
{ status: 400 }
)
}
const newOrder = {
id: `ORDER_${Date.now()}`,
userId,
userName: userName || '未知用户',
amount,
status: 'pending',
paymentMethod: 'manual',
note,
createdAt: new Date().toISOString()
}
orders.push(newOrder)
return NextResponse.json({
success: true,
message: '订单创建成功',
order: newOrder
})
} catch (error) {
return NextResponse.json(
{ error: '创建订单失败' },
{ status: 500 }
)
}
}
// PUT: 更新订单状态
export async function PUT(req: NextRequest) {
try {
const body = await req.json()
const { orderId, status, note } = body
const orderIndex = orders.findIndex(o => o.id === orderId)
if (orderIndex === -1) {
return NextResponse.json(
{ error: '订单不存在' },
{ status: 404 }
)
}
orders[orderIndex] = {
...orders[orderIndex],
status,
note: note || orders[orderIndex].note,
updatedAt: new Date().toISOString()
}
if (status === 'paid') {
orders[orderIndex].paidAt = new Date().toISOString()
}
return NextResponse.json({
success: true,
message: '订单状态更新成功',
order: orders[orderIndex]
})
} catch (error) {
return NextResponse.json(
{ error: '更新订单失败' },
{ status: 500 }
)
}
}
// DELETE: 删除订单
export async function DELETE(req: NextRequest) {
try {
const { searchParams } = new URL(req.url)
const orderId = searchParams.get('id')
if (!orderId) {
return NextResponse.json(
{ error: '订单ID不能为空' },
{ status: 400 }
)
}
const orderIndex = orders.findIndex(o => o.id === orderId)
if (orderIndex === -1) {
return NextResponse.json(
{ error: '订单不存在' },
{ status: 404 }
)
}
orders.splice(orderIndex, 1)
return NextResponse.json({
success: true,
message: '订单删除成功'
})
} catch (error) {
return NextResponse.json(
{ error: '删除订单失败' },
{ status: 500 }
)
}
}