Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import { NextResponse } from 'next/server' import { withAuth } from '@/lib/auth/withAuth' import { db, schema } from '@/db' import { desc, inArray } from 'drizzle-orm' // Force dynamic rendering export const dynamic = 'force-dynamic' /** * GET /api/demo/task/list * Fetch recent background tasks, optionally filtered by status * * Query params: * - status: comma-separated list of statuses (e.g., "running,pending") * - limit: max number of tasks to return (default 50) */ export const GET = withAuth(async (request) => { try { const { searchParams } = new URL(request.url) const statusParam = searchParams.get('status') const limit = Math.min(parseInt(searchParams.get('limit') ?? '50'), 100) let query = db .select({ id: schema.backgroundTasks.id, type: schema.backgroundTasks.type, status: schema.backgroundTasks.status, progress: schema.backgroundTasks.progress, progressMessage: schema.backgroundTasks.progressMessage, error: schema.backgroundTasks.error, createdAt: schema.backgroundTasks.createdAt, input: schema.backgroundTasks.input, }) .from(schema.backgroundTasks) .orderBy(desc(schema.backgroundTasks.createdAt)) .limit(limit) if (statusParam) { const statuses = statusParam.split(',').map((s) => s.trim()) query = query.where(inArray(schema.backgroundTasks.status, statuses)) as typeof query } const tasks = await query return NextResponse.json({ tasks }) } catch (error) { console.error('Failed to fetch tasks:', error) return NextResponse.json( { error: 'Failed to fetch tasks', details: String(error) }, { status: 500 } ) } }) |