2026-06-20 14:54:53 +03:00

93 lines
5.2 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.

# 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 + SessionProvider
- `app/providers/SessionProvider.tsx` — провайдер сессии (управление жизненным циклом auth)
- `main.tsx` — использует AppProviders вместо ручной композиции
### 2. Session-слой
- `entities/session/api/sessionApi.ts` — чистые функции запросов
(login, register, refresh, logout, getMe, updateProfile) через shared/api/client
- `entities/session/model/sessionContext.ts` — SessionContext + SessionContextValue
- `entities/session/model/useSession.ts` — хук доступа к контексту
- `entities/session/index.ts` — barrel export
### 3. Coexistence через shims
Все старые файлы становятся re-export шимами:
- `api/auth.ts` → shim для entities/session/api/sessionApi
- `hooks/useAuth.ts` → shim для entities/session/model/useSession
- `context/AuthContext.tsx` → shim для app/providers/SessionProvider + entities/session/model/sessionContext
- `routes.tsx` → shim для app/routing/AppRoutes
- `App.tsx` → shim для app/App
- `components/Layout.tsx` → shim для app/layouts/AppLayout
- `components/ProtectedRoute.tsx` → shim для app/routing/ProtectedRoute
### 4. Тесты следуют за кодом
- `api/auth.test.ts``entities/session/api/sessionApi.test.ts`
- `context/AuthContext.test.tsx``app/providers/SessionProvider.test.tsx`
- `hooks/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 шимами
- Экраны входа, регистрации и профиля работают как раньше
- Страницы брокера (защищённые) работают как раньше