import { NextResponse } from "next/server"; import { apiError } from "@/lib/api.ts"; import { assertSameOrigin, requireRole } from "@/lib/auth/session.ts"; import { all } from "@/lib/db/index.ts"; import { ingestCourses } from "@/lib/rag/ingest.ts"; export const maxDuration = 600; export async function GET() { try { await requireRole("instructor"); const runs = all("SELECT id, started_at, finished_at, triggered_by, files_scanned, files_ingested, files_skipped, chunks_created, status, report FROM ingestion_runs ORDER BY id DESC LIMIT 10"); const documents = all( `SELECT id, course_code, space, filename, doc_type, title, week, status, error, visible_to_students, ingested_at, chunk_count FROM documents ORDER BY course_code, space, week, filename` ); return NextResponse.json({ runs, documents }); } catch (e) { return apiError(e); } } export async function POST(req: Request) { try { await assertSameOrigin(); const user = await requireRole("instructor"); const force = new URL(req.url).searchParams.get("force") === "1"; const result = await ingestCourses({ force, triggeredBy: `admin:${user.username}` }); return NextResponse.json({ ok: true, ...result }); } catch (e) { return apiError(e); } }