feat(site-finder): кнопка «Полный отчёт (PDF)» (#2259 PR-E, финал эпика) #2288

Merged
bot-backend merged 1 commit from feat/full-report-button into main 2026-07-03 11:18:33 +00:00
Collaborator

Что

PR-E, последний кирпич #2259. Общий хук useFullReport(cad) + кнопка в двух местах (PticaReports — вместо honest-disabled «скоро», и ExportButtons на светлой странице; логика не дублируется):

  • Клик → POST /report: 200 ready (кэш) → мгновенный download; 202 building → TanStack-поллинг status каждые 5с.
  • Cap 3 мин → честный timeout «Сборка затянулась — попробуйте позже» (failed-состояния в API нет — осознанно), кнопка снова активна.
  • Авто-download по ready (один раз, ref-guard); скачивание скрытым <a download> — наследует Caddy basic_auth, без отдельно авторизуемого blob-fetch.
  • Сброс прогона при смене cad; elapsed по wall-clock (не тикам — иммунно к троттлингу фоновых вкладок); отмена поллинга на unmount (enabled+gcTime 0).
  • Состояния: «Полный отчёт (PDF)» → «Готовится… м:сс» → «Скачать отчёт (дата из report_generated_at)» / timeout / error. Токены --accent-2/--warn/--danger, без эмодзи, ru-даты с NaN-гардом.
  • Статусы сужены типами из сгенерённого api-types (не строками руками).

Попутный фикс: паттерн reports/ из PR-D в .gitignore заякорен в корень (/reports/) — неякоренный молча игнорил бы новые файлы в frontend/.../ptica/reports/.

Проверки

tsc --noEmit 0 ошибок · eslint 0/0 · prettier clean.

Ревью

code-reviewer: APPROVE; оба optional-полиша применены (NaN-гард даты, сброс при смене cad).

Post-merge

Деплой соберёт образ с новыми geo-deps (первый билд дольше). qa: полный цикл на реальном участке — кнопка → building → ready → PDF скачан и открывается; права /opt/gendesign/reports.

Refs #2259

## Что PR-E, последний кирпич #2259. Общий хук `useFullReport(cad)` + кнопка в двух местах (PticaReports — вместо honest-disabled «скоро», и ExportButtons на светлой странице; логика не дублируется): - Клик → `POST /report`: 200 ready (кэш) → мгновенный download; 202 building → TanStack-поллинг status каждые 5с. - **Cap 3 мин** → честный timeout «Сборка затянулась — попробуйте позже» (failed-состояния в API нет — осознанно), кнопка снова активна. - Авто-download по ready (один раз, ref-guard); скачивание скрытым `<a download>` — наследует Caddy basic_auth, без отдельно авторизуемого blob-fetch. - Сброс прогона при смене cad; elapsed по wall-clock (не тикам — иммунно к троттлингу фоновых вкладок); отмена поллинга на unmount (enabled+gcTime 0). - Состояния: «Полный отчёт (PDF)» → «Готовится… м:сс» → «Скачать отчёт (дата из report_generated_at)» / timeout / error. Токены --accent-2/--warn/--danger, без эмодзи, ru-даты с NaN-гардом. - Статусы сужены типами из сгенерённого api-types (не строками руками). **Попутный фикс**: паттерн `reports/` из PR-D в .gitignore заякорен в корень (`/reports/`) — неякоренный молча игнорил бы новые файлы в `frontend/.../ptica/reports/`. ## Проверки tsc --noEmit 0 ошибок · eslint 0/0 · prettier clean. ## Ревью code-reviewer: ✅ APPROVE; оба optional-полиша применены (NaN-гард даты, сброс при смене cad). ## Post-merge Деплой соберёт образ с новыми geo-deps (первый билд дольше). qa: полный цикл на реальном участке — кнопка → building → ready → PDF скачан и открывается; права /opt/gendesign/reports. Refs #2259
bot-backend added 1 commit 2026-07-03 11:14:37 +00:00
feat(site-finder): кнопка «Полный отчёт (PDF)» — enqueue → поллинг → download (#2259 PR-E)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 11s
CI / changes (pull_request) Successful in 12s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m55s
CI / openapi-codegen-check (pull_request) Successful in 2m56s
1312dec0e6
Общий хук useFullReport(cad): POST /report (200 ready → мгновенный
download; 202 building → TanStack-поллинг status 5с с cap 3 мин →
честный timeout «Сборка затянулась — попробуйте позже»), авто-download
по ready (ref-guard, один раз), скачивание скрытым <a download> —
наследует Caddy basic_auth без отдельного blob-fetch. Сброс прогона
при смене cad (страховка in-place реюза), elapsed по wall-clock
(иммунно к троттлингу фоновых вкладок). Кнопка в PticaReports
(вместо honest-disabled «скоро») и ExportButtons — логика не
дублируется. Статусы сужены типами из api-types (не руками).

Fix: паттерн reports/ из PR-D в .gitignore заякорен в корень
(/reports/) — неякоренный матчил и frontend .../ptica/reports/.

Refs #2259
bot-backend merged commit 2f127c4316 into main 2026-07-03 11:18:33 +00:00
bot-backend deleted branch feat/full-report-button 2026-07-03 11:18:33 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#2288
No description provided.