feat(parcels): connection-points endpoint (Forgejo #115 Phase 1 backend) #190

Merged
lekss361 merged 5 commits from feat/115-connection-points-backend into main 2026-05-16 05:58:28 +00:00

5 commits

Author SHA1 Message Date
lekss361
0cf0ab3358 fix(site-finder): narrow except clauses, fix quarter fallback WKT, add LIMIT to zouit query
Addresses review-bot blockers on PR #190 (4 reviews flagged same issues):

1. Narrow except in quarter_dump_lookup.py:
   - line 579/651: except Exception -> (OperationalError, ProgrammingError) для outer DB queries
   - line 598/668: except Exception -> (ValueError, json.JSONDecodeError) для json.loads fallback

2. _get_parcel_wkt fallback (line 506-521): cad_quarters_geom хранит 3-segment quarter keys,
   а cad_num передавался 4-segment -> fallback всегда возвращал NULL. Теперь derive_quarter_cad(cad_num).

3. _get_zouit_engineering_overlaps: добавлен LIMIT 100 для unbounded jsonb_array_elements fan-out
   (engineering_structures query уже имел LIMIT 50).
2026-05-16 08:55:53 +03:00
lekss361
fad815c728 ci: re-trigger Forgejo Actions after merge of main 2026-05-16 08:38:26 +03:00
lekss361
3ee2a99958 Merge main (post-PR191 competitors + PR192 forgejo workflow) into feat/115-connection-points-backend
# Conflicts:
#	backend/app/api/v1/parcels.py
2026-05-16 08:26:42 +03:00
lekss361
e737fe5ddd Merge remote-tracking branch 'forgejo/main' into feat/115-connection-points-backend
All checks were successful
CI / backend (pull_request) Successful in 1m9s
CI / frontend (pull_request) Successful in 2m21s
2026-05-16 01:18:00 +03:00
lekss361
3c8bea38d0 feat(parcels): GET /{cad_num}/connection-points — engineering points (Forgejo #115)
Some checks failed
CI / backend (pull_request) Failing after 1m0s
CI / frontend (pull_request) Successful in 2m19s
KILLER feature от Макса — точки подключения к инженерным сетям + охранные
зоны как proxy для подбора инвест-участков.

Phase 1 — публичные NSPD данные (cat 36328 + 37578).

- ConnectionPointsResponse pydantic + 3 nested models
- get_connection_points() + helpers (parcel WKT, structures by boundary,
  zouit overlaps) с ST_Distance(::geography) для метров
- GET endpoint с Query(radius_m, ge=50, le=2000, default=500)
- 7 tests

Closes part of #115 (Phase 1 backend).
2026-05-16 01:03:42 +03:00