import { NextRequest, NextResponse } from "next/server"; import { prisma } from "@/lib/db"; export async function GET( _req: NextRequest, { params }: { params: Promise<{ id: string }> } ) { try { const { id } = await params; const job = await prisma.job.findUnique({ where: { id }, include: { results: { orderBy: { createdAt: "desc" }, take: 200, }, }, }); if (!job) return NextResponse.json({ error: "Job not found" }, { status: 404 }); // Find which domains already existed in vault before this job const resultDomains = job.results .map(r => r.domain) .filter((d): d is string => !!d); const preExistingDomains = new Set( (await prisma.lead.findMany({ where: { domain: { in: resultDomains }, sourceJobId: { not: id }, }, select: { domain: true }, })).map(l => l.domain).filter((d): d is string => !!d) ); return NextResponse.json({ id: job.id, type: job.type, status: job.status, config: JSON.parse(job.config), totalLeads: job.totalLeads, emailsFound: job.emailsFound, error: job.error, createdAt: job.createdAt, updatedAt: job.updatedAt, results: job.results.map(r => { let address: string | null = null; let phone: string | null = null; if (r.source) { try { const src = JSON.parse(r.source) as { address?: string; phone?: string }; address = src.address ?? null; phone = src.phone ?? null; } catch { /* ignore */ } } return { id: r.id, companyName: r.companyName, domain: r.domain, contactName: r.contactName, contactTitle: r.contactTitle, email: r.email, linkedinUrl: r.linkedinUrl, address, phone, createdAt: r.createdAt, isNew: !r.domain || !preExistingDomains.has(r.domain), }; }), }); } catch (err) { console.error("GET /api/jobs/[id]/status error:", err); return NextResponse.json({ error: "Failed" }, { status: 500 }); } }