1.7 KiB
1.7 KiB
Client Timeline Calendar Scheduler
Одноразовый scheduler-раннер для актуализации ClientTimelineEntry.datetime по календарным событиям.
Что делает
- Ищет неархивные
CalendarEventс привязкой к контакту в окне времени вокругnow. - Если событие уже вошло в окно
start - 30 минут, делаетupsertвClientTimelineEntryсcontentType=CALENDAR_EVENTиdatetime=start-30m. - Логика идемпотентна: повторный запуск только подтверждает корректное значение.
- Берёт Postgres advisory lock, чтобы параллельные запуски не конфликтовали.
Переменные окружения
DATABASE_URL(обязательно)TIMELINE_EVENT_PREDUE_MINUTES(по умолчанию30)TIMELINE_EVENT_LOOKBACK_MINUTES(по умолчанию180)TIMELINE_EVENT_LOOKAHEAD_MINUTES(по умолчанию1440)TIMELINE_SCHEDULER_LOCK_KEY(по умолчанию603001)
Локальный запуск
cd frontend
node schedulers/client-timeline-calendar/run.mjs
Docker запуск
docker build -f schedulers/client-timeline-calendar/Dockerfile -t client-timeline-calendar-scheduler .
docker run --rm \
-e DATABASE_URL="$DATABASE_URL" \
client-timeline-calendar-scheduler
Dokploy schedule
Создай Scheduled Job и поставь период * * * * * (раз в минуту), который запускает этот контейнер/команду.