import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/db'; import { verifyAdminToken, unauthorizedResponse } from '@/lib/admin-auth'; import { Prisma } from '@prisma/client'; export async function GET(request: NextRequest) { if (!verifyAdminToken(request)) return unauthorizedResponse(); const searchParams = request.nextUrl.searchParams; const page = Math.max(1, Number(searchParams.get('page') || '1')); const pageSize = Math.min(100, Math.max(1, Number(searchParams.get('page_size') || '20'))); const status = searchParams.get('status'); const userId = searchParams.get('user_id'); const dateFrom = searchParams.get('date_from'); const dateTo = searchParams.get('date_to'); const where: Prisma.OrderWhereInput = {}; if (status) where.status = status as any; if (userId) where.userId = Number(userId); if (dateFrom || dateTo) { where.createdAt = {}; if (dateFrom) where.createdAt.gte = new Date(dateFrom); if (dateTo) where.createdAt.lte = new Date(dateTo); } const [orders, total] = await Promise.all([ prisma.order.findMany({ where, orderBy: { createdAt: 'desc' }, skip: (page - 1) * pageSize, take: pageSize, select: { id: true, userId: true, userName: true, userEmail: true, amount: true, status: true, paymentType: true, createdAt: true, paidAt: true, completedAt: true, failedReason: true, expiresAt: true, }, }), prisma.order.count({ where }), ]); return NextResponse.json({ orders: orders.map(o => ({ ...o, amount: Number(o.amount), })), total, page, page_size: pageSize, total_pages: Math.ceil(total / pageSize), }); }