All files / web/src/app/api/demo/task/list route.ts

0% Statements 0/53
0% Branches 0/1
0% Functions 0/1
0% Lines 0/53

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