import { NextRequest, NextResponse } from "next/server"; import { auth } from "@/auth"; import { db } from "@/lib/db"; export async function GET( req: NextRequest, { params }: { params: Promise<{ shotId: string }> } ) { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const { shotId } = await params; const shot = await db.shot.findUnique({ where: { id: shotId }, include: { artist: { select: { id: true, name: true, email: true, image: true } }, versions: { orderBy: { versionNumber: "desc" }, include: { artist: { select: { id: true, name: true, email: true, image: true } }, _count: { select: { comments: true } }, approvals: { orderBy: { createdAt: "desc" }, include: { user: { select: { id: true, name: true, image: true } } }, }, }, }, }, }); if (!shot) { return NextResponse.json({ error: "Shot not found" }, { status: 404 }); } const project = await db.project.findUnique({ where: { id: shot.projectId }, select: { name: true }, }); const [tasks, artists] = await Promise.all([ db.task.findMany({ where: { shotId }, orderBy: { sortOrder: "asc" }, include: { assignedArtist: { select: { id: true, name: true, email: true, image: true } }, _count: { select: { versions: true } }, versions: { take: 1, orderBy: { versionNumber: "desc" }, select: { id: true, versionNumber: true, approvalStatus: true, createdAt: true }, }, }, }), db.user.findMany({ where: { isActive: true }, select: { id: true, name: true, email: true }, orderBy: { name: "asc" }, }), ]); const canApprove = ["ADMIN", "PRODUCER", "SUPERVISOR"].includes( session.user.role as string ); // Serialize BigInt fields (fileSize) so JSON.stringify doesn't throw const shotSerialized = { ...shot, versions: shot.versions.map((v) => ({ ...v, fileSize: v.fileSize != null ? v.fileSize.toString() : null, })), }; return NextResponse.json({ shot: shotSerialized, projectName: project?.name ?? "", canApprove, tasks, artists, }); }