/home/techb158/cosmic-risk.abdallabala.com/src/app/api/projects/[projectId]/report-exports
Edit: /home/techb158/cosmic-risk.abdallabala.com/src/app/api/projects/[projectId]/report-exports/route.js (1814B)
const { prisma } = require("../../../../../lib/prisma");
const { getActorFromRequest } = require("../../../../../lib/request-context");
const { requireProjectAccess } = require("../../../../../lib/tenant-guard");
const { jsonResponse, errorResponse } = require("../../../../../lib/http");
const { getReport } = require("../../../../../services/reporting-service");
export async function GET(request, { params }) {
try {
const { projectId } = await params;
const actor = await getActorFromRequest(request);
await requireProjectAccess(actor, projectId, "report:export");
const exports = await prisma.reportExport.findMany({
where: { projectId },
orderBy: { createdAt: "desc" }
});
return jsonResponse({ exports });
} catch (error) {
return errorResponse(error);
}
}
export async function POST(request, { params }) {
try {
const { projectId } = await params;
const actor = await getActorFromRequest(request);
await requireProjectAccess(actor, projectId, "report:export");
const body = await request.json();
const { reportType, format } = body;
const type = reportType || "executive.html";
const fmt = format || (type.endsWith(".csv") ? "csv" : type.endsWith(".json") ? "json" : "html");
const report = await getReport(projectId, type);
const project = await prisma.project.findUnique({ where: { id: projectId } });
const exportRecord = await prisma.reportExport.create({
data: {
workspaceId: project.workspaceId,
projectId,
reportType: type,
format: fmt,
status: "Generated",
metadata: { size: report.body.length },
createdById: actor.userId
}
});
return jsonResponse(exportRecord, 201);
} catch (error) {
return errorResponse(error);
}
}