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