48 lines
1.6 KiB
Markdown
48 lines
1.6 KiB
Markdown
# Fix: supplement_schedule() — scheduled_at NULL fallback
|
||
|
||
**Дата:** 2026-04-25
|
||
**Файл:** `fr24_worker.py` → функция `supplement_schedule()`
|
||
|
||
## Проблема
|
||
|
||
В SQL INSERT `supplement_schedule()` поле `scheduled_at` вычислялось простым CASE-выражением:
|
||
|
||
```sql
|
||
CASE
|
||
WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW')
|
||
THEN fa.datetime_takeoff
|
||
ELSE fa.datetime_landed
|
||
END AS scheduled_at
|
||
```
|
||
|
||
Если `datetime_takeoff` и `datetime_landed` оба NULL — поле получало NULL, что ломало логику расчёта задержек.
|
||
|
||
## Исправление
|
||
|
||
Обёрнуто в `COALESCE` с fallback на `fa.first_seen`:
|
||
|
||
```sql
|
||
-- scheduled_at: takeoff time for departures, landed for arrivals; fallback to first_seen
|
||
COALESCE(
|
||
CASE
|
||
WHEN fa.origin_icao IN ('UUEE','UUDD','UUWW','UUBW')
|
||
THEN fa.datetime_takeoff
|
||
ELSE fa.datetime_landed
|
||
END,
|
||
fa.first_seen
|
||
) AS scheduled_at
|
||
```
|
||
|
||
## Деплой
|
||
|
||
| Шаг | Статус |
|
||
|-----|--------|
|
||
| Локальный файл отредактирован | ✅ |
|
||
| VM `/home/fr24/projects/fr24/ingest/tracks_fr24/fr24_worker.py` обновлён | ✅ |
|
||
| `docker cp` → `fr24-tracks-fr24:/app/fr24_worker.py` | ✅ |
|
||
| Верификация в контейнере | ✅ |
|
||
|
||
> **Примечание:** Фактический путь исходников на VM оказался
|
||
> `/home/fr24/projects/fr24/ingest/tracks_fr24/fr24_worker.py`
|
||
> (не `tracks_fr24/` в корне projects, как было в задаче, а `ingest/tracks_fr24/`).
|