# 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`) ## Локальный запуск ```bash cd frontend node schedulers/client-timeline-calendar/run.mjs ``` ## Docker запуск ```bash 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 и поставь период `* * * * *` (раз в минуту), который запускает этот контейнер/команду.