/home/techb158/balavpn.abdallabala.com/src/app/api/projects/[projectId]/scheduled-reports
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/projects/[projectId]/scheduled-reports/route.js (1523B)
const { prisma } = require("../../../../../lib/prisma");
const { getActorFromRequest } = require("../../../../../lib/request-context");
const { requireProjectAccess } = require("../../../../../lib/tenant-guard");
const { jsonResponse, errorResponse } = require("../../../../../lib/http");
export async function GET(request, { params }) {
try {
const { projectId } = await params;
const actor = await getActorFromRequest(request);
await requireProjectAccess(actor, projectId, "report:export");
const schedules = await prisma.scheduledReport.findMany({
where: { projectId },
orderBy: { createdAt: "desc" }
});
return jsonResponse(schedules);
} 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, cronExpr, recipients } = body;
const schedule = await prisma.scheduledReport.create({
data: {
projectId,
reportType: reportType || "executive.html",
format: format || "html",
cronExpr: cronExpr || "0 8 * * 1",
recipients: recipients || [],
createdById: actor.userId,
nextRunAt: new Date(Date.now() + 86400000)
}
});
return jsonResponse(schedule, 201);
} catch (error) {
return errorResponse(error);
}
}