diff --git a/apps/docs/docs/frontend/overview.md b/apps/docs/docs/frontend/overview.md index ac8b2cd..2e4104a 100644 --- a/apps/docs/docs/frontend/overview.md +++ b/apps/docs/docs/frontend/overview.md @@ -32,68 +32,51 @@ apps/frontend/src/ │ ├── AppLayout.tsx # Шапка + │ └── index.ts ├── api/ -│ ├── auth.ts # re-export shim → entities/session/api -│ ├── client.ts # HTTP-клиент (fetch) -│ ├── portfolio.ts # Portfolio API helpers -│ ├── responses.ts # Типы ответов (ручные) -│ ├── screener.ts # Screener API helpers -│ └── types.ts # Типы из openapi-typescript -├── context/ -│ └── AuthContext.tsx # re-export shim → app/providers/SessionProvider +│ └── screener.ts # Screener API helpers (не мигрирован) ├── hooks/ -│ ├── useAuth.ts # re-export shim → entities/session/model -│ ├── usePortfolio.ts -│ ├── usePortfolioAnalytics.ts -│ ├── usePortfolioMutations.ts -│ ├── usePortfolios.ts -│ ├── usePositionMutations.ts -│ ├── useScreener.ts -│ ├── useSearch.ts -│ ├── useStock.ts -│ ├── useStockCandles.ts -│ ├── useStockDividends.ts -│ ├── useBond.ts -│ └── useBondCandles.ts +│ └── useScreener.ts # Screener hook (не мигрирован) ├── components/ -│ ├── Layout.tsx # re-export shim → app/layouts -│ ├── ProtectedRoute.tsx # re-export shim → app/routing -│ ├── SearchBar.tsx -│ ├── PriceChart.tsx -│ ├── StockDetails.tsx -│ ├── BondDetails.tsx -│ └── portfolios/ -├── entities/ -│ ├── session/ # FSD: auth/session (api, model/context + hook) -│ ├── broker-account/ # FSD: account slice (api, model, ui) -│ ├── broker-position/ # FSD: position slice (api, model) -│ └── broker-operation/ # FSD: operation slice (api, model) -├── widgets/ -│ ├── broker-account-card/ # FSD: account card widget -│ ├── broker-accounts-summary/ # FSD: accounts summary widget -│ ├── broker-allocation-chart/ # FSD: allocation chart widget -│ └── broker-operations-table/ # FSD: operations table widget -├── pages/ -│ ├── HomePage.tsx -│ ├── StockPage.tsx -│ ├── BondPage.tsx -│ ├── LoginPage.tsx -│ ├── RegisterPage.tsx -│ ├── ProfilePage.tsx -│ ├── portfolios/ -│ ├── screener/ -│ ├── broker-accounts/ # FSD: page entrypoint -│ ├── broker-account/ # FSD: page entrypoint -│ ├── broker-positions/ # FSD: page entrypoint -│ └── broker-operations/ # FSD: page entrypoint +│ └── screener/ # Screener UI (не мигрирован) +├── entities/ # FSD business entities +│ ├── session/ # Auth/session (api, model) +│ ├── stock/ # Акции (api, model) +│ ├── bond/ # Облигации (api, model) +│ ├── portfolio/ # Портфели (api, model) +│ └── search/ # Поиск (model) +├── widgets/ # FSD compositional widgets +│ ├── stock-details/ # Детальная карточка акции +│ ├── bond-details/ # Детальная карточка облигации +│ ├── price-chart/ # График цены +│ ├── dividends-table/ # Таблица дивидендов +│ ├── search-bar/ # Поисковая строка +│ ├── portfolio-card/ # Карточка портфеля +│ ├── portfolio-form/ # Форма портфеля +│ ├── portfolio-summary/ # Сводка портфеля (график + стоимость) +│ ├── portfolio-analytics/ # Метрики портфеля +│ ├── share-positions-table/ # Таблица позиций-акций +│ └── bond-positions-table/ # Таблица позиций-облигаций +├── pages/ # FSD page entrypoints +│ ├── home/ # Главная +│ ├── stock/ # Страница акции +│ ├── bond/ # Страница облигации +│ ├── login/ # Вход +│ ├── register/ # Регистрация +│ ├── profile/ # Профиль +│ ├── portfolios/ # Список и детальная портфеля +│ ├── screener/ # Скринер (не мигрирован) +│ └── broker-*/ # Брокерские страницы ├── test/ +│ ├── factories.ts # Фабрики тестовых данных │ ├── handlers.ts # MSW handlers -│ └── test-utils.tsx +│ ├── server.ts # MSW server +│ ├── test-utils.tsx # Обёртка рендера +│ └── setup.ts # Настройка jsdom └── styles.css ``` ## FSD-миграция -### app-слой и session-сущность +### app-слой Создан `app/` слой FSD, в который перенесены инфраструктурные модули: @@ -102,21 +85,41 @@ apps/frontend/src/ - `app/layouts/` — AppLayout (шапка + Outlet) - `app/App.tsx` — BrowserRouter → AppRoutes -Домен auth переведён в `entities/session/`: +### entities -- `entities/session/api/` — login, register, logout, refresh, getMe, updateProfile -- `entities/session/model/` — SessionContext, useSession +Домены бизнес-сущностей переведены в FSD: -Старые файлы (`api/auth.ts`, `hooks/useAuth.ts`, `context/AuthContext.tsx`, `routes.tsx`, `components/Layout.tsx`, `components/ProtectedRoute.tsx`, `App.tsx`) сохранены как ре-экспорт шмы для обратной совместимости. +| Сущность | api | model | ui | +|----------|-----|-------|----| +| `session` | login, register, refresh, logout, getMe, updateProfile | SessionContext, useSession | — | +| `stock` | getStock, getStockCandles, getStockDividends | useStock, useStockCandles, useStockDividends | — | +| `bond` | getBond, getBondCandles | useBond, useBondCandles | — | +| `portfolio` | CRUD портфелей и позиций, аналитика | usePortfolio, usePortfolios, usePortfolioAnalytics, usePortfolioMutations, usePositionMutations | — | +| `search` | — | useSearch | — | -### broker-домен (пилот) +Каждая сущность имеет barrel-файл `index.ts`, реэкспортирующий публичное API. -Broker-домен переведён в пилотный FSD срез: +### widgets -- `pages/broker-*` — тонкие route entrypoints -- `widgets/broker-*` — screen-level композиция -- `entities/broker-*` — доменные срезы (api, model, ui) +Композиционные блоки UI. Каждый виджет — директория с `index.ts` и `ui/`: -### Остальные домены +- `stock-details`, `bond-details` — детальные карточки бумаг +- `price-chart`, `dividends-table` — графики и таблицы +- `search-bar` — поиск с автодополнением +- `portfolio-card`, `portfolio-form`, `portfolio-summary`, `portfolio-analytics` — UI портфелей +- `share-positions-table`, `bond-positions-table` — таблицы позиций -`portfolio`, `screener` пока остаются в исторической технической структуре. +### pages + +Страницы-точки входа. FSD-страницы мигрированы: `home/`, `stock/`, `bond/`, `broker-*`. Временно не мигрированы: `portfolios/`, `screener/`, `LoginPage.tsx`, `RegisterPage.tsx`, `ProfilePage.tsx`. + +### Не мигрировано + +Скринер остаётся в исторической структуре: + +- `api/screener.ts` — API-вызовы +- `hooks/useScreener.ts` — логика с URLSearchParams +- `components/screener/` — FilterPanel, FilterPanelBond, FilterPanelShare, ScreenerTable +- `pages/screener/ScreenerPage.tsx` — страница + +ESLint-правила на границы импортов FSD пока не введены.