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

Оценщики клиента должны попадать на новую витрину /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 / компоненты остаются в репо (только редирект, обратимо)
This commit is contained in:
bot-backend 2026-07-02 19:26:55 +03:00
parent 86a22dfc8f
commit f937f5a168

View file

@ -16,6 +16,18 @@ const nextConfig: NextConfig = {
// trailingSlash — false (default), важно чтобы Caddy /trade-in без слэша
// редиректил на /trade-in/.
// Каноничная витрина = /v2. Легаси-корень (app/page.tsx, HeroSummary)
// остаётся в репо, но корень редиректит на /v2, чтобы оценщики попадали
// сразу на новую версию. permanent:false → 307 (обратимо, не кэшируется
// навсегда). basePath авто-префиксит source/destination → редирект живёт
// на /trade-in → /trade-in/v2. Query-string Next пробрасывает автоматически
// (destination без своего query), поэтому /trade-in/?id=<uuid> →
// /trade-in/v2?id=<uuid> — ссылки на конкретную оценку (restore по ?id=)
// не ломаются.
async redirects() {
return [{ source: "/", destination: "/v2", permanent: false }];
},
// В dev (без Caddy) Next.js сам проксирует /api/* и /health на backend
// так что браузер использует относительные same-origin URLs.
async rewrites() {