Scheduler
Mounted at /scheduler. Called by external schedulers (cron). No authentication.
These endpoints query D1 for eligible cases, claim rows to prevent duplicates, enqueue messages to SCHEDULER_NOTIFICATION_QUEUE, and return a processing summary. The queue consumer sends push notifications via the socket hub.
GET /scheduler/draftNotification
Section titled “GET /scheduler/draftNotification”Processes reminders for cases still in draft status at least 24 hours after creation. Each eligible case receives the UCP98 draft notification once; review_cases.draft_notif_sent prevents duplicate sends.
Response (200)
Section titled “Response (200)”{ "status": 1000, "message": "Draft notifications processed successfully", "data": { "eligible": 1, "enqueued": 1 }}GET /scheduler/sendDelayReportNotification
Section titled “GET /scheduler/sendDelayReportNotification”Sends delay-report reminders for cases where the report is overdue. Uses review_cases.delay_report_sent for deduplication.
Response (200)
Section titled “Response (200)”{ "status": 1000, "message": "Delay report notifications processed successfully", "data": { "eligible": 2, "enqueued": 2 }}Queue message shape
Section titled “Queue message shape”{ "kind": "draft" | "delay_report", "case_id": "uuid", "user_id": "string"}Consumer: src/queues/scheduler-notification-consumer.ts