feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name #1756

Merged
lekss361 merged 2 commits from feat/snapshot-exclude-dev into main 2026-06-18 13:11:30 +00:00
Owner

Контекст (клиент-кейс Брусника)

В PDF-снимке участка (GET /api/v1/parcels/{cad_num}/snapshot.pdf) блок «Конкуренты» показывает ближайшие ЖК с застройщиком (dev_name). Для версии отчёта, отправляемой Бруснике, нужно убрать «оффер от Практики» — конкурентов застройщика ГК «Практика» (dev_name="Практика", напр. ЖК «Дом 7», «ЖК ТЕМП»). «Практика» — это данные провайдера Objective/DOM.РФ, не хардкод.

Решение

Опциональный query-параметр exclude_dev (CSV, регистронезависимо) на эндпоинте snapshot.pdf — фильтрует строки конкурентов по dev_name перед рендером. Без параметра поведение НЕ меняется (zero behavior change). Денис генерирует версию Брусники как:

.../parcels/{cad}/snapshot.pdf?exclude_dev=Практика

Изменения

  • backend/app/api/v1/parcels.py — чистый helper _filter_competitors_by_dev(rows, exclude_dev) + параметр exclude_dev в parcel_snapshot_pdf; фильтр применяется к уже выбранным competitor-строкам (block 4b, SQL не тронут), перед generate_snapshot_pdf. Пустой/None dev_name не исключается. Лог только при реальном дропе.
  • backend/tests/api/v1/test_parcel_snapshot_exclude_dev.py (нов) — 7 unit на чистую функцию (CSV, регистр, мульти-застройщик, None dev_name) + 2 endpoint smoke (mocked DB + patched render).

Тесты

uv run pytest -q tests/ -k "snapshot or parcel"118 passed, 5 skipped. ruff clean.

Проверка после деплоя

GET /api/v1/parcels/{cad}/snapshot.pdf?exclude_dev=Практика — конкуренты ГК Практика исчезают из блока; без параметра — отчёт прежний.

## Контекст (клиент-кейс Брусника) В PDF-снимке участка (`GET /api/v1/parcels/{cad_num}/snapshot.pdf`) блок «Конкуренты» показывает ближайшие ЖК с застройщиком (`dev_name`). Для версии отчёта, отправляемой Бруснике, нужно убрать «оффер от Практики» — конкурентов застройщика ГК «Практика» (`dev_name="Практика"`, напр. ЖК «Дом 7», «ЖК ТЕМП»). «Практика» — это данные провайдера Objective/DOM.РФ, не хардкод. ## Решение Опциональный query-параметр `exclude_dev` (CSV, регистронезависимо) на эндпоинте snapshot.pdf — фильтрует строки конкурентов по `dev_name` перед рендером. **Без параметра поведение НЕ меняется** (zero behavior change). Денис генерирует версию Брусники как: ``` .../parcels/{cad}/snapshot.pdf?exclude_dev=Практика ``` ## Изменения - `backend/app/api/v1/parcels.py` — чистый helper `_filter_competitors_by_dev(rows, exclude_dev)` + параметр `exclude_dev` в `parcel_snapshot_pdf`; фильтр применяется к уже выбранным competitor-строкам (block 4b, **SQL не тронут**), перед `generate_snapshot_pdf`. Пустой/None `dev_name` не исключается. Лог только при реальном дропе. - `backend/tests/api/v1/test_parcel_snapshot_exclude_dev.py` (нов) — 7 unit на чистую функцию (CSV, регистр, мульти-застройщик, None dev_name) + 2 endpoint smoke (mocked DB + patched render). ## Тесты `uv run pytest -q tests/ -k "snapshot or parcel"` → **118 passed, 5 skipped**. ruff clean. ## Проверка после деплоя `GET /api/v1/parcels/{cad}/snapshot.pdf?exclude_dev=Практика` — конкуренты ГК Практика исчезают из блока; без параметра — отчёт прежний.
lekss361 added 1 commit 2026-06-18 12:24:25 +00:00
feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name
Some checks failed
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 1m52s
CI / backend-tests (pull_request) Successful in 8m55s
1302fe63d7
Optional query param exclude_dev (CSV, case-insensitive) drops competitor
rows by dev_name from the «Конкуренты» block of the parcel snapshot PDF.
Client case: generate a report without a specific developer's offer.
Without the param behavior is unchanged (zero behavior change).
lekss361 added the
enhancement
scope/backend
status/review
labels 2026-06-18 12:24:40 +00:00
bot-backend added 1 commit 2026-06-18 12:52:19 +00:00
chore(frontend): regen api-types for snapshot exclude_dev param
All checks were successful
CI / changes (pull_request) Successful in 5s
CI / frontend-tests (pull_request) Successful in 1m1s
CI / openapi-codegen-check (pull_request) Successful in 1m50s
CI / backend-tests (pull_request) Successful in 8m50s
5408466905
lekss361 merged commit 5b14d88290 into main 2026-06-18 13:11:30 +00:00
lekss361 deleted branch feat/snapshot-exclude-dev 2026-06-18 13:11:30 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1756
No description provided.