import { NextRequest, NextResponse } from 'next/server'; const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8001'; // GET /api/jobs/[jobId]/compare?previous= // Returns reviews from current job with a flag indicating if they're new export async function GET( request: NextRequest, { params }: { params: Promise<{ jobId: string }> } ) { try { const { jobId } = await params; const { searchParams } = new URL(request.url); const previousJobId = searchParams.get('previous'); // Fetch current job reviews const currentResponse = await fetch(`${API_BASE_URL}/jobs/${jobId}/reviews?limit=10000`); if (!currentResponse.ok) { const errorText = await currentResponse.text().catch(() => ''); console.error(`Failed to get current job reviews: ${currentResponse.status} - ${errorText}`); return NextResponse.json( { error: `Failed to get reviews for job ${jobId} (${currentResponse.status})` }, { status: currentResponse.status } ); } const currentData = await currentResponse.json(); const currentReviews = currentData.reviews || []; // If no previous job to compare, all reviews are "new" if (!previousJobId) { const reviewsWithStatus = currentReviews.map((review: Record) => ({ ...review, is_new: true, })); return NextResponse.json({ reviews: reviewsWithStatus, total_count: reviewsWithStatus.length, new_count: reviewsWithStatus.length, previous_job_id: null, }); } // Fetch previous job reviews const previousResponse = await fetch(`${API_BASE_URL}/jobs/${previousJobId}/reviews?limit=10000`); if (!previousResponse.ok) { // Previous job not found, treat all as new const reviewsWithStatus = currentReviews.map((review: Record) => ({ ...review, is_new: true, })); return NextResponse.json({ reviews: reviewsWithStatus, total_count: reviewsWithStatus.length, new_count: reviewsWithStatus.length, previous_job_id: previousJobId, }); } const previousData = await previousResponse.json(); const previousReviews = previousData.reviews || []; // Create a Set of previous review IDs for O(1) lookup const previousReviewIds = new Set( previousReviews.map((r: { review_id: string }) => r.review_id) ); // Mark reviews as new if they weren't in the previous job const reviewsWithStatus = currentReviews.map((review: { review_id: string }) => ({ ...review, is_new: !previousReviewIds.has(review.review_id), })); const newCount = reviewsWithStatus.filter((r: { is_new: boolean }) => r.is_new).length; return NextResponse.json({ reviews: reviewsWithStatus, total_count: reviewsWithStatus.length, new_count: newCount, previous_job_id: previousJobId, }); } catch (error) { console.error('Compare API error:', error); return NextResponse.json( { error: 'Failed to compare reviews' }, { status: 500 } ); } }