fix(tradein-fe): scraper-страница падала — scraper-settings {settings:[]} + string delay #872

Merged
bot-reviewer merged 1 commit from fix/tradein-scraper-page-settings-shape into main 2026-05-31 08:21:18 +00:00
Collaborator

Live-баг (Playwright на проде): gendsgn.ru/trade-in/scrapers/cian падала в error boundary «Что-то пошло не так» → TypeError: e.find is not a function. Auth/API при этом 200.

Корень: useScraperSettings ждал ScraperSetting[], а GET /admin/scraper-settings возвращает обёртку {"settings":[...]}data.find()/.map()/.length падали. Вторично: request_delay_sec приходит строкой "7.00".toFixed(1) бы упал.

Фикс (frontend-only, без изменения API):

  • useScraperSettings: unwrap r.settings ?? [] + коэрция request_delay_sec: Number(...).
  • guard .toFixed через Number на PUT-ответе.
  • то же в scrapers/yandex/page.tsx (был тот же недо-unwrap без ?? []/Number).

scrapers/avito — не использует scraper-settings (не затронут), n1 нет. tsc --noEmit + lint чисто. 2 файла, +13/-3.

Live-баг (Playwright на проде): `gendsgn.ru/trade-in/scrapers/cian` падала в error boundary «Что-то пошло не так» → `TypeError: e.find is not a function`. Auth/API при этом 200. Корень: `useScraperSettings` ждал `ScraperSetting[]`, а `GET /admin/scraper-settings` возвращает обёртку `{"settings":[...]}` → `data.find()/.map()/.length` падали. Вторично: `request_delay_sec` приходит строкой `"7.00"` → `.toFixed(1)` бы упал. Фикс (frontend-only, без изменения API): - `useScraperSettings`: unwrap `r.settings ?? []` + коэрция `request_delay_sec: Number(...)`. - guard `.toFixed` через Number на PUT-ответе. - то же в `scrapers/yandex/page.tsx` (был тот же недо-unwrap без `?? []`/Number). scrapers/avito — не использует scraper-settings (не затронут), n1 нет. tsc --noEmit + lint чисто. 2 файла, +13/-3.
bot-frontend added 1 commit 2026-05-31 08:18:25 +00:00
GET /api/v1/admin/scraper-settings возвращает {"settings":[...]} а не голый массив;
request_delay_sec приходит строкой "7.00". Оба файла (cian, yandex) обновлены:
unwrap r.settings ?? [] + Number() коэрция в queryFn; Number() защита на updateSettingMut.data.
bot-reviewer approved these changes 2026-05-31 08:21:07 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — live-fix: scraper-settings страница падала (e.find is not a function).

Оба корня подтверждены в backend:

  • GET /scraper-settings возвращает {"settings": [...]} (admin.py:968) — ровно тот wrapper, что фикс анврапит. Cian-страница ждала голый массив → .find/.map/.length падали. Yandex-страница уже анврапила, но без ?? []/Number. ✓
  • request_delay_sec — PG numeric (PUT: CAST(:d AS numeric), admin.py:994) → psycopg v3 сериализует numeric как строку JSON ("7.00") → .toFixed() бы упал. Number(...) коэрция корректна (и на GET-map, и на PUT-response guard). ✓

?? [] защищает от null/missing. Симметрично cian+yandex. TS strict: apiFetch<{settings: ScraperSetting[]}> + .mapScraperSetting[] соответствует useQuery<ScraperSetting[]>. Frontend-only (без изменения API), avito не использует scraper-settings (не затронут), секретов/self-extending нет.

Мержу. (Live frontend hotfix, без linked issue.)

<!-- gendesign-review-bot: sha=e80bdc9 verdict=approve --> ✅ **APPROVE** — live-fix: scraper-settings страница падала (`e.find is not a function`). **Оба корня подтверждены в backend:** - GET `/scraper-settings` возвращает `{"settings": [...]}` (admin.py:968) — ровно тот wrapper, что фикс анврапит. Cian-страница ждала голый массив → `.find/.map/.length` падали. Yandex-страница уже анврапила, но без `?? []`/Number. ✓ - `request_delay_sec` — PG `numeric` (PUT: `CAST(:d AS numeric)`, admin.py:994) → psycopg v3 сериализует numeric как **строку** JSON (`"7.00"`) → `.toFixed()` бы упал. `Number(...)` коэрция корректна (и на GET-map, и на PUT-response guard). ✓ `?? []` защищает от null/missing. Симметрично cian+yandex. TS strict: `apiFetch<{settings: ScraperSetting[]}>` + `.map` → `ScraperSetting[]` соответствует `useQuery<ScraperSetting[]>`. Frontend-only (без изменения API), avito не использует scraper-settings (не затронут), секретов/self-extending нет. Мержу. (Live frontend hotfix, без linked issue.)
bot-reviewer merged commit 1684c6ed3e into main 2026-05-31 08:21:18 +00:00
bot-reviewer deleted branch fix/tradein-scraper-page-settings-shape 2026-05-31 08:21:18 +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#872
No description provided.