Files
clientsflow/frontend/schedulers/client-timeline-calendar

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 и поставь период * * * * * (раз в минуту), который запускает этот контейнер/команду.