45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
/**
|
|
* Next.js Instrumentation — runs once on server startup.
|
|
*
|
|
* Sets up:
|
|
* - Automation event handler registration
|
|
* - Hourly deadline scheduler
|
|
*/
|
|
export async function register() {
|
|
if (process.env.NEXT_RUNTIME === "nodejs") {
|
|
// Register automation event handler (side-effect import)
|
|
await import("@/lib/services/automation-service");
|
|
|
|
// Start hourly deadline check
|
|
const { emitDeadlineEvents } = await import(
|
|
"@/lib/services/deadline-service"
|
|
);
|
|
const { prisma } = await import("@/lib/prisma");
|
|
|
|
const HOUR_MS = 60 * 60 * 1000;
|
|
|
|
const runDeadlineCheck = async () => {
|
|
try {
|
|
const orgs = await prisma.organization.findMany({
|
|
select: { id: true },
|
|
});
|
|
for (const org of orgs) {
|
|
await emitDeadlineEvents(org.id);
|
|
}
|
|
console.log(
|
|
`[Deadline Scheduler] Checked ${orgs.length} org(s) for deadlines`
|
|
);
|
|
} catch (err) {
|
|
console.error("[Deadline Scheduler] Error:", err);
|
|
}
|
|
};
|
|
|
|
// Initial check after 30s (let server fully start)
|
|
setTimeout(runDeadlineCheck, 30_000);
|
|
|
|
// Then every hour
|
|
setInterval(runDeadlineCheck, HOUR_MS);
|
|
|
|
console.log("[Instrumentation] Deadline scheduler registered (hourly)");
|
|
}
|
|
}
|