82 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 проходят