- 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
85 lines
4.6 KiB
Markdown
85 lines
4.6 KiB
Markdown
# 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
|
||
- Документация обновлена
|