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: def cad_exists_in_db(db: Session, cad_num: str) -> bool:
"""Проверка: есть ли geometry для cad_num в любой из 3 таблиц. """Проверка: есть ли НЕПУСТАЯ geometry для cad_num в любой из 3 таблиц.
Использует EXISTS short-circuit самая дешёвая проверка. Использует 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( row = db.execute(
text( text(
""" """
SELECT 1 WHERE EXISTS ( 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 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 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 ) LIMIT 1
""" """
), ),