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