82 lines
4.4 KiB
Markdown
82 lines
4.4 KiB
Markdown
# FSD Entities Migration
|
||
|
||
Дата: 2026-06-20
|
||
Статус: в работе
|
||
|
||
## Контекст
|
||
|
||
Продолжается поэтапный переход frontend на Feature-Sliced Design (FSD). После успешного пилота
|
||
broker-домена (`frontend-fsd-broker-pilot`) и создания shared-слоя (`frontend-fsd-shared-layer`)
|
||
следующий шаг — миграция core domain entities: stock, bond, portfolio.
|
||
|
||
В текущей структуре их код размазан по техническим каталогам:
|
||
- API-функции акций и облигаций находятся в `shared/api/client.ts` (вместе с HTTP-инфраструктурой)
|
||
- API-функции портфелей находятся в `api/portfolio.ts` (в legacy-папке)
|
||
- TanStack Query хуки находятся в `hooks/` (5 файлов для portfolio + 3 для stock + 2 для bond)
|
||
- Типы уже централизованы в `shared/api/responses.ts`
|
||
|
||
Это усложняет навигацию, поддержку и дальнейшее масштабирование FSD-архитектуры.
|
||
|
||
## Цель
|
||
|
||
Перенести stock, bond и portfolio домены в FSD-сущности (`entities/`) по тому же паттерну, что и
|
||
broker-account/broker-position/broker-operation:
|
||
|
||
- `entities/stock/` — API-функции и query-хуки для акций
|
||
- `entities/bond/` — API-функции и query-хуки для облигаций
|
||
- `entities/portfolio/` — API-функции и query-хуки для портфелей
|
||
|
||
## Требования
|
||
|
||
### 1. Каждая сущность получает явную FSD-структуру
|
||
|
||
- `api/` — чистые функции запросов (без TanStack Query, только `request` вызовы)
|
||
- `model/` — TanStack Query хуки и бизнес-логика
|
||
- `index.ts` — barrel export (только re-exports, без логики)
|
||
|
||
### 2. API-функции выносятся из shared/api/client.ts
|
||
|
||
`shared/api/client.ts` должен содержать только инфраструктуру:
|
||
- `request` — базовый HTTP-клиент
|
||
- `setAccessToken`, `getAccessToken`, `setOnUnauthorized` — управление токенами
|
||
- `searchSecurities` — поиск (кросс-доменный)
|
||
- `getHealth` — health check
|
||
|
||
Все stock/bond API-функции переезжают в соответствующие entity `api/`.
|
||
|
||
### 3. Query-хуки переносятся из global hooks/
|
||
|
||
Все TanStack Query хуки для stock, bond и portfolio переезжают из `hooks/` в
|
||
`entities/{entity}/model/`.
|
||
|
||
### 4. Совместимость на время перехода
|
||
|
||
Старые файлы становятся re-export шимами, чтобы избежать big-bang переписывания.
|
||
Потребители (страницы) обновляются на новые FSD-импорты в рамках этой же фичи.
|
||
|
||
### 5. Тесты следуют за кодом
|
||
|
||
Unit-тесты и hook-тесты перемещаются рядом с новым расположением кода.
|
||
|
||
### 6. Поведение не меняется
|
||
|
||
Никакой функциональности не добавляется и не изменяется. Только перегруппировка кода.
|
||
|
||
## Ограничения
|
||
|
||
- Не затрагиваются `features/` и `app/` слои — они будут в следующих итерациях
|
||
- Не затрагиваются `useSearch`, `useScreener`, `api/auth.ts`, `api/screener.ts`
|
||
- Не меняются `shared/api/responses.ts` и generated types
|
||
- Не меняются backend-контракты
|
||
|
||
## Acceptance Criteria
|
||
|
||
- `entities/stock/` существует с api/model/index.ts, все тесты проходят
|
||
- `entities/bond/` существует с api/model/index.ts, все тесты проходят
|
||
- `entities/portfolio/` существует с api/model/index.ts
|
||
- `shared/api/client.ts` больше не содержит stock/bond API-функций
|
||
- Все страницы (StockPage, BondPage, PortfolioDetailPage, PortfoliosListPage) импортируют
|
||
из новых entity entrypoints
|
||
- Старые файлы стали re-export шимами
|
||
- Frontend lint, tests и build проходят
|