Sergey Krylov a13b5145f7
Some checks failed
CI / ci (pull_request) Failing after 3m32s
CI / ci (push) Failing after 2m50s
docs(frontend): align tooling spec with implementation
2026-06-23 21:30:11 +03:00

108 lines
6.4 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 Infrastructure Tooling — Tasks
## Phase 1: ky Migration
- [x] Доработать `shared/api/kyClient.ts`: добавить normalizeEnvelope, request, kyApi, configureKyAuth
- [x] Экспортировать `kyApi` (create экземпляр) и `configureKyAuth` из kyClient
- [x] Перевести `entities/session/api/sessionApi.ts` на kyApi
- [x] Перевести `entities/stock/api/stockApi.ts` на kyApi
- [x] Перевести `entities/bond/api/bondApi.ts` на kyApi
- [x] Перевести `entities/search/api/searchApi.ts` на kyApi
- [x] Перевести `entities/portfolio/api/portfolioApi.ts` на kyApi
- [x] Перевести `entities/broker-account/api/brokerAccountApi.ts` на kyApi
- [x] Перевести `entities/broker-position/api/brokerPositionApi.ts` на kyApi
- [x] Перевести `entities/broker-operation/api/brokerOperationApi.ts` на kyApi
- [x] Перевести `entities/broker-event/api/brokerEventApi.ts` на kyApi
- [x] Перевести `features/screener/api/screenerApi.ts` на kyApi
- [x] Удалить `shared/api/client.ts`
- [x] Заменить `configureAuth()` на `configureKyAuth()` в SessionProvider
- [x] `npm run test` — все тесты проходят
- [x] `npm run build` — сборка проходит
## Phase 2: Biome Migration
- [x] Research: проверить Biome plugin system на поддержку FSD/import-no-restricted-paths — не поддерживается, ESLint оставлен для FSD
- [x] Установить `@biomejs/biome` (devDependency)
- [x] Запустить `npx @biomejs/biome migrate eslint --write` — 0 правил мигрировано, FSD-правила несовместимы, конфиг откачен
- [x] Создать и настроить `biome.json` под проект
- [x] ESLint оставлен только для FSD-правил (`.eslintrc.cjs`)
- [x] Удалить зависимость prettier (ESLint core, @typescript-eslint/*, eslint-plugin-* оставлены для FSD-правил)
- [x] Удалить `.prettierrc` и `.prettierignore` — форматирование перешло к Biome
- [x] Обновить `package.json`: `lint``biome check src/`, удалить prettier из format/format:check
- [x] Обновить `.gitea/workflows/ci.yml`: удалить format:check (биом проверяет в lint)
- [x] Обновить pre-commit hook (lint-staged → biome + prettier)
- [x] Прогнать `biome check --write src/`
- [x] `npm run test` — все тесты проходят
- [x] `npm run build` — сборка проходит
## Phase 3: Unify API Types
- [x] Аудит импортов: entity API используют `types.ts` (codegen) или `responses.ts`?
- [x] Переключить все импорты с `responses.ts` на `@/shared/api` (типы перенесены в `index.ts` вместо рукописного файла)
- [x] Удалить `shared/api/responses.ts` (после переключения)
- [x] normalizeEnvelope перенесён в `shared/api/kyClient.ts`
- [x] `npm run build` — сборка проходит
## Phase 4: MSW Browser
- [x] Создать `apps/frontend/mocks/browser.ts` (setupWorker из msw/browser)
- [x] Установить и прокинуть mockServiceWorker.js: `npx msw init public/`
- [x] Создать `shared/config/env.ts` с чтением и экспортом VITE_API_MOCK + VITE_API_URL
- [x] В `main.tsx`: при `VITE_API_MOCK === 'true'` запускать `worker.start()`
- [x] Проверить: `VITE_API_MOCK=true npm run dev` без бэкенда — приложение работает
- [x] Проверить: `VITE_API_MOCK=false npm run dev` — запросы идут на бэкенд
## Phase 5: Env Validation
- [x] Разработать Zod-схему в `shared/config/env.ts` для всех VITE_* переменных
- [x] Валидация env выполняется при импорте (safeParse в модуле env.ts)
- [x] Проверить: при отсутствии обязательной переменной — понятная ошибка
## Phase 6: TanStack Router
### Setup
- [x] Установить `@tanstack/react-router`, `@tanstack/router-devtools`
- [ ] ~~Установить `@tanstack/router-plugin`~~ (решение: code-first, без плагина)
### Route files
- [x] Создать `src/app/routing/routeTree.tsx` — все маршруты (code-first)
- [x] root route + AppLayout
- [x] index → HomePage
- [x] stocks/$secid → StockPage
- [x] bonds/$secid → BondPage
- [x] screener → ScreenerPage
- [x] login → LoginPage
- [x] register → RegisterPage
- [x] profile → ProfilePage (guard)
- [x] portfolios → PortfoliosListPage (guard)
- [x] portfolios/$id → PortfolioDetailPage (guard)
- [x] broker → BrokerAccountsPage (guard)
- [x] broker/$accountId → BrokerAccountOverviewPage (guard)
- [x] broker/$accountId/shares → BrokerPositionsPage (guard)
- [x] broker/$accountId/bonds → BrokerPositionsPage (guard)
- [x] broker/$accountId/operations → BrokerOperationsPage (guard)
- [x] broker/$accountId/events → BrokerEventsPage (guard)
### Router integration
- [x] Создать `app/routing/router.ts`: `createRouter()` с Route Tree
- [x] Настроить `beforeLoad` для guard'ов (requireAuth)
- [ ] Настроить loaders для предзагрузки (TanStack Query) — отложено
- [x] Заменить `<BrowserRouter>` + `<Routes>``<RouterProvider>` в `App.tsx`
### Replace imports
- [x] Заменить `Link``@tanstack/react-router` Link по всему проекту
- [x] Заменить `useNavigate``@tanstack/react-router`
- [x] Заменить `useParams``@tanstack/react-router`
- [x] Заменить `useSearchParams``useSearchParamsCompat` (временная обёртка)
- [x] Заменить `useLocation``@tanstack/react-router`
### Tests
- [x] Заменить `MemoryRouter` в тестах на `createMemoryHistory` + `RouterProvider`
- [x] Обновить тестовые утилиты (`test-utils.tsx`)
- [x] `npm run test` — все тесты проходят (116)
- [x] `npm run build` — сборка проходит
### Devtools
- [x] Настроить `@tanstack/router-devtools` в dev-режиме
- [x] Проверить навигацию по всем страницам вручную