Sergey Krylov b069575fbb
Some checks failed
CI / ci (pull_request) Failing after 2m51s
CI / ci (push) Failing after 2m38s
refactor(frontend): remove FSD shim files and dead code
- Break entity shim chain: brokerPositionApi, brokerOperationApi now use shared/api/client directly
- Remove all 43 shim re-export files (api/, hooks/, context/, components/, pages/ flat shims, routes.tsx)
- Remove entire pages/broker/ dead code directory
- Remove api/broker.ts after breaking the shim chain
- Switch auth consumers from AuthProvider (shim) to SessionProvider (FSD)
- Fix api/screener.ts imports to use @/shared/api
- Update frontend hooks.md and routes.md documentation
- 2840 lines removed, 71 lines added
2026-06-20 20:42:44 +03:00

4.6 KiB
Raw Permalink Blame History

Frontend FSD Cleanup

Дата: 2026-06-20 Статус: спецификация

Контекст

FSD-миграция фронтенда выполнена в 5 фаз:

  1. Broker pilot — entities broker-account/broker-position/broker-operation + widgets + pages
  2. Shared layer — shared/api, shared/ui
  3. Entities migration — stock, bond, portfolio, session, search
  4. App + auth — providers, routing, layouts
  5. Market pages — home/stock/bond pages + widgets

После завершения миграции остались shim-файлы — однострочные re-export из старых путей в новые FSD-точки входа — а также мёртвый код в pages/broker/ и старая цепочка entity API-прокси, которая идёт через api/broker.ts вместо прямого вызова shared/api/client.

Цель

Удалить shim-файлы и мёртвый код, разорвав последние цепочки legacy-импортов, чтобы FSD-структура стала единственной архитектурой фронтенда без дублирующихся точек входа.

Область изменений

Удаляемые shim-файлы (re-export only)

  • api/auth.ts, client.ts, portfolio.ts, responses.ts, types.ts, broker.test.ts
  • hooks/ — все файлы, кроме useScreener.ts
  • context/AuthContext.tsx, AuthContext.test.tsx
  • components/ — все файлы, кроме screener/ и portfolios/
  • pages/broker/ — все 13 файлов
  • pages/HomePage.tsx, pages/StockPage.tsx, pages/BondPage.tsx
  • routes.tsx
  • Тесты, привязанные к удаляемым shim-файлам

Переписываемые entity API (разрыв цепочки к api/broker.ts)

  • entities/broker-position/api/brokerPositionApi.ts — прямой вызов shared/api/client
  • entities/broker-operation/api/brokerOperationApi.ts — прямой вызов shared/api/client

Удаляемый мёртвый код

  • api/broker.ts — после разрыва цепочки перестаёт быть нужен

Обновляемые потребители (переключение с shim на FSD-импорты)

  • pages/broker/BrokerPages.test.tsx — импорты из ../../hooks/entities/broker-*
  • pages/broker/BrokerAccountsPage.test.tsx — импорт shim → pages/broker-accounts
  • test/test-utils.tsx, hooks/useAuth.test.tsx, entities/session/model/useSession.test.tsxAuthProvider из context/AuthContextSessionProvider из app/providers/SessionProvider

Обновляемая документация

  • apps/docs/docs/frontend/hooks.md — убрать legacy shim-пути
  • apps/docs/docs/frontend/routes.md — убрать shim-файлы

Ограничения

  • Изменения ограничены frontend-пакетом.
  • Не мигрируется screener (живой код, не shim) — остаётся в текущей структуре.
  • Не мигрируется portfolio pages (живой код, не shim) — остаются в текущей структуре.
  • Не мигрируется LoginPage/RegisterPage/ProfilePage (живой код, не shim).
  • Не меняется поведение UI, API-контракты, роутинг.
  • Не вводятся ESLint import boundaries.

Acceptance Criteria

  • api/ содержит только screener.ts (живой код)
  • hooks/ содержит только useScreener.ts (живой код)
  • context/ удалён полностью
  • components/ содержит только screener/ и portfolios/ (живой код)
  • pages/broker/ удалён полностью
  • pages/HomePage.tsx, StockPage.tsx, BondPage.tsx удалены (живут в pages/home/, pages/stock/, pages/bond/)
  • routes.tsx удалён (живёт в app/routing/AppRoutes.tsx)
  • api/broker.ts удалён
  • entities/broker-position/api/brokerPositionApi.ts и entities/broker-operation/api/brokerOperationApi.ts импортируют напрямую из shared/api/client
  • Все тестовые файлы, привязанные к удалённым shim-файлам, удалены
  • Все потребители переключены на FSD-импорты
  • npm test -w apps/frontend — PASS
  • npm run lint -w apps/frontend — PASS
  • npm run build -w apps/frontend — PASS
  • npm run build -w apps/docs — PASS
  • Документация обновлена