5.2 KiB
Frontend FSD App + Auth
Дата: 2026-06-20 Статус: спецификация
Концепт
Frontend проекта прошёл три итерации FSD-миграции: broker pilot, shared layer, entities migration.
Теперь существующие FSD-слои (entities, widgets, shared) не имеют соответствующей
инфраструктуры app/ — корневого слоя приложения, в который выносятся entry point, routing,
провайдеры и layout. Параллельно auth-домен остаётся в legacy-структуре (api/auth.ts,
context/AuthContext.tsx, hooks/useAuth.ts), что не позволяет завершить вертикальный срез
auth/user session.
Цель
Создать FSD-слой app/ и мигрировать auth-домен в entities/session/ и app/providers/,
завершив тем сквозной путь от корня приложения до domain entities через все FSD-слои.
Область изменений
Входит
- Создание
app/layer: entry point (App.tsx), routing (AppRoutes,ProtectedRoute), providers (SessionProvider,AppProviders), layout (AppLayout) - Создание
entities/session/для auth-домена: session API, session context, useSession hook - Перенос тестов вслед за кодом
- Превращение исходных legacy-файлов в re-export shims
- Обновление импортов в auth-страницах
Не входит
- Миграция
api/screener.ts,hooks/useScreener.ts,components/screener/*— следующий этап - Миграция
api/broker.ts,api/broker.test.ts— dead code, удаление в отдельной задаче - Миграция
components/SearchBar.tsx,hooks/useSearch.ts— следующий этап - Миграция
components/portfolios/*,pages/portfolios/*— следующий этап - Миграция
pages/StockPage.tsx,pages/BondPage.tsx,pages/HomePage.tsx— следующий этап - Изменение backend-контрактов, Swagger, CI/CD
- Введение import guards или ESLint boundaries
Требования
1. App-слой приложения
app/App.tsx— entry point: BrowserRouter + AppRoutes, без провайдеровapp/routing/AppRoutes.tsx— все route definitions (аналог текущегоroutes.tsx)app/routing/ProtectedRoute.tsx— guard для аутентифицированных маршрутовapp/layouts/AppLayout.tsx— корневой layout (header, навигация, outlet)app/providers/AppProviders.tsx— композиция корневых провайдеров: QueryClientProvider + SessionProviderapp/providers/SessionProvider.tsx— провайдер сессии (управление жизненным циклом auth)main.tsx— использует AppProviders вместо ручной композиции
2. Session-слой
entities/session/api/sessionApi.ts— чистые функции запросов (login, register, refresh, logout, getMe, updateProfile) через shared/api/cliententities/session/model/sessionContext.ts— SessionContext + SessionContextValueentities/session/model/useSession.ts— хук доступа к контекстуentities/session/index.ts— barrel export
3. Coexistence через shims
Все старые файлы становятся re-export шимами:
api/auth.ts→ shim для entities/session/api/sessionApihooks/useAuth.ts→ shim для entities/session/model/useSessioncontext/AuthContext.tsx→ shim для app/providers/SessionProvider + entities/session/model/sessionContextroutes.tsx→ shim для app/routing/AppRoutesApp.tsx→ shim для app/Appcomponents/Layout.tsx→ shim для app/layouts/AppLayoutcomponents/ProtectedRoute.tsx→ shim для app/routing/ProtectedRoute
4. Тесты следуют за кодом
api/auth.test.ts→entities/session/api/sessionApi.test.tscontext/AuthContext.test.tsx→app/providers/SessionProvider.test.tsxhooks/useAuth.test.tsx→entities/session/model/useSession.test.tsx
5. Поведение не меняется
Никакой функциональности не добавляется и не изменяется. Только перегруппировка кода.
Acceptance Criteria
app/App.tsx,app/providers/,app/routing/,app/layouts/существуют с указанной структуройentities/session/существует с api/model/index.ts- Все тесты проходят (
npm test -w apps/frontend) - Lint проходит (
npm run lint -w apps/frontend) - Build проходит (
npm run build -w apps/frontend) - Все legacy файлы стали re-export шимами
- Экраны входа, регистрации и профиля работают как раньше
- Страницы брокера (защищённые) работают как раньше