fix(analyze): cad_exists_in_db requires non-NULL geometry #1034

Merged
bot-backend merged 1 commit from fix/cad-exists-null-geom into main 2026-06-03 15:00:07 +00:00

View file

@ -65,19 +65,28 @@ def validate_cad_format(cad_num: str) -> bool:
def cad_exists_in_db(db: Session, cad_num: str) -> bool:
"""Проверка: есть ли geometry для cad_num в любой из 3 таблиц.
"""Проверка: есть ли НЕПУСТАЯ geometry для cad_num в любой из 3 таблиц.
Использует EXISTS short-circuit самая дешёвая проверка.
NB: `geom IS NOT NULL` обязателен есть ~964 строк в cad_parcels_geom с meta,
но NULL-геометрией. Без фильтра функция врала бы «geometry есть» analyze
fallback решал бы "ready"/не ставил NSPD-fetch участок навсегда застревал в
202 (никогда не подтянул бы реальную геометрию). С фильтром null-geom участок
корректно идёт в fetch НСПД отдаёт геометрию analyze работает (или 404).
"""
row = db.execute(
text(
"""
SELECT 1 WHERE EXISTS (
SELECT 1 FROM cad_quarters_geom g WHERE g.cad_number = :c
SELECT 1 FROM cad_quarters_geom g
WHERE g.cad_number = :c AND g.geom IS NOT NULL
UNION ALL
SELECT 1 FROM cad_buildings b WHERE b.cad_num = :c
SELECT 1 FROM cad_buildings b
WHERE b.cad_num = :c AND b.geom IS NOT NULL
UNION ALL
SELECT 1 FROM cad_parcels_geom p WHERE p.cad_num = :c
SELECT 1 FROM cad_parcels_geom p
WHERE p.cad_num = :c AND p.geom IS NOT NULL
) LIMIT 1
"""
),