# 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.tsx` — `AuthProvider` из `context/AuthContext` → `SessionProvider` из `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 - Документация обновлена