feat: триггер schedule для автоматизаций — ежедневный запуск по МСК

- планировщик server/workers/automation-scheduler.ts (тик 60 сек, все организации)
- защита от дублей: automations.last_scheduled_run_at (миграция 0065), catch-up в пределах суток
- UI: выбор триггера 'По расписанию' и времени запуска в Automations.tsx
- MCP: create_automation/update_automation принимают trigger 'schedule'
- triggerData: { trigger: 'schedule', scheduledAt }
This commit is contained in:
2026-07-24 13:52:03 +03:00
parent c152a670ae
commit b4bded2ffb
8 changed files with 130 additions and 7 deletions

View File

@@ -7,6 +7,7 @@ import { pushService } from "./services/push.service";
import { notificationService } from "./services/notification.service";
import { webPushService } from "./services/web-push.service";
import { startMedScheduleWorker } from "./medschedule/worker";
import { startAutomationScheduler } from "./workers/automation-scheduler";
import { storage } from "./storage";
import type { ReminderRecipient } from "@shared/schema";
import { db, withSuperAdmin } from "./db"; // lazy proxy — safe at module load; throws on first use if DATABASE_URL missing
@@ -1028,6 +1029,10 @@ async function runStartupDataPatches() {
startMedScheduleWorker();
log('MedSchedule worker started');
// Start automation scheduler (schedule-trigger automations, daily at configured MSK time)
startAutomationScheduler();
log('Automation scheduler started');
// Clean up duplicate subscriptions then backfill defaults for existing users
(async () => {
try {