4.4 KiB
Raw Blame History

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