fix(tradein/frontend): redirect legacy /trade-in root to canonical /v2 #2166

Merged
lekss361 merged 1 commit from fix/tradein-canonical-v2-redirect into main 2026-07-02 16:33:09 +00:00
Collaborator

Summary

  • Легаси-корень /trade-in/ (app/page.tsx, HeroSummary) теперь редиректит на каноничную витрину /trade-in/v2 (wired на real data). Оценщики клиента попадают сразу на новую версию.
  • Механизм: декларативный redirects() в next.config.ts{ source: "/", destination: "/v2", permanent: false }.
    • basePath авто-префиксит source/destination -> редирект /trade-in -> /trade-in/v2 (подтверждено в routes-manifest.json: regex ^(?!/trade-in/_next)/trade-in(?:/)?$, статус 307).
    • permanent:false -> 307, обратимо, не кэшируется навсегда.
    • Query-string сохраняется: destination без своего query -> Next пробрасывает входящий query автоматически. /trade-in/?id=<uuid> -> /trade-in/v2?id=<uuid>. v2 читает ?id= через window.location.search (restore оценки) -> ссылки не ломаются.
  • Легаси page.tsx и компоненты остаются в репо — только редирект, полностью обратимо.

Test plan

  • npm run buildNEXT_PUBLIC_BASE_PATH=/trade-in) зелёный — 13 страниц, редирект скомпилирован.
  • Проверен routes-manifest.json: source /trade-in, destination /trade-in/v2, 307, destination без query (query пробрасывается).
  • Post-deploy smoke (QA/main): curl -I /trade-in/ -> 307, Location: /trade-in/v2; /trade-in/?id=<uuid> -> Location: /trade-in/v2?id=<uuid>.

Отдельного merge не делаю (frontend-engineer).

## Summary - Легаси-корень `/trade-in/` (`app/page.tsx`, HeroSummary) теперь редиректит на каноничную витрину `/trade-in/v2` (wired на real data). Оценщики клиента попадают сразу на новую версию. - Механизм: декларативный `redirects()` в `next.config.ts` — `{ source: "/", destination: "/v2", permanent: false }`. - `basePath` авто-префиксит source/destination -> редирект `/trade-in` -> `/trade-in/v2` (подтверждено в `routes-manifest.json`: regex `^(?!/trade-in/_next)/trade-in(?:/)?$`, статус 307). - `permanent:false` -> 307, обратимо, не кэшируется навсегда. - **Query-string сохраняется**: destination без своего query -> Next пробрасывает входящий query автоматически. `/trade-in/?id=<uuid>` -> `/trade-in/v2?id=<uuid>`. v2 читает `?id=` через `window.location.search` (restore оценки) -> ссылки не ломаются. - Легаси `page.tsx` и компоненты **остаются в репо** — только редирект, полностью обратимо. ## Test plan - [x] `npm run build` (с `NEXT_PUBLIC_BASE_PATH=/trade-in`) зелёный — 13 страниц, редирект скомпилирован. - [x] Проверен `routes-manifest.json`: source `/trade-in`, destination `/trade-in/v2`, 307, destination без query (query пробрасывается). - [ ] Post-deploy smoke (QA/main): `curl -I` `/trade-in/` -> `307`, `Location: /trade-in/v2`; `/trade-in/?id=<uuid>` -> `Location: /trade-in/v2?id=<uuid>`. Отдельного merge не делаю (frontend-engineer).
bot-backend added 1 commit 2026-07-02 16:27:40 +00:00
fix(tradein/frontend): redirect legacy /trade-in root to canonical /v2
All checks were successful
CI / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
f937f5a168
Оценщики клиента должны попадать на новую витрину /trade-in/v2 (wired на
real data), а не на легаси-корень (app/page.tsx, HeroSummary). Добавляю
декларативный redirects() в next.config: source "/" -> destination "/v2".

- permanent:false -> 307 (обратимо, не кэшируется навсегда)
- basePath авто-префиксит -> редирект /trade-in -> /trade-in/v2
- query-string Next пробрасывает автоматически (destination без своего
  query) -> /trade-in/?id=<uuid> -> /trade-in/v2?id=<uuid>, restore
  оценки по ?id= не ломается (v2 читает ?id= через window.location.search)
- легаси page.tsx / компоненты остаются в репо (только редирект, обратимо)
lekss361 merged commit b8ed46d2dc into main 2026-07-02 16:33:09 +00:00
lekss361 deleted branch fix/tradein-canonical-v2-redirect 2026-07-02 16:33:09 +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#2166
No description provided.