Sergey Krylov 106467e5c4
All checks were successful
CI / lint (pull_request) Successful in 2m8s
CI / test (pull_request) Successful in 1m57s
CI / build (pull_request) Successful in 2m5s
CI / lint (push) Successful in 2m1s
CI / test (push) Successful in 1m51s
CI / build (push) Successful in 2m9s
docs: translate docs to russian
2026-06-16 05:13:34 +03:00

2.1 KiB
Raw Blame History

Обзор frontend

React SPA, собранная с Vite.

Технологический стек

  • React 18
  • react-router-dom v6
  • TanStack Query v5
  • lightweight-charts v4
  • openapi-fetch (с рукописными типами responses.ts)
  • Vitest + Testing Library + MSW
  • Vite 5

Структура исходников

apps/frontend/src/
├── main.tsx                  # Точка входа
├── App.tsx                   # BrowserRouter
├── routes.tsx                # Маршруты
├── api/
│   ├── auth.ts               # Auth API helpers
│   ├── client.ts             # HTTP-клиент (fetch)
│   ├── portfolio.ts          # Portfolio API helpers
│   ├── responses.ts          # Типы ответов (ручные)
│   ├── screener.ts           # Screener API helpers
│   └── types.ts              # Типы из openapi-typescript
├── context/
│   └── AuthContext.tsx
├── hooks/
│   ├── useAuth.ts
│   ├── usePortfolio.ts
│   ├── usePortfolioAnalytics.ts
│   ├── usePortfolioMutations.ts
│   ├── usePortfolios.ts
│   ├── usePositionMutations.ts
│   ├── useScreener.ts
│   ├── useSearch.ts
│   ├── useStock.ts
│   ├── useStockCandles.ts
│   ├── useStockDividends.ts
│   ├── useBond.ts
│   └── useBondCandles.ts
├── components/
│   ├── Layout.tsx
│   ├── ProtectedRoute.tsx
│   ├── SearchBar.tsx
│   ├── PriceChart.tsx
│   ├── StockDetails.tsx
│   ├── BondDetails.tsx
│   └── portfolios/
├── pages/
│   ├── HomePage.tsx
│   ├── StockPage.tsx
│   ├── BondPage.tsx
│   ├── LoginPage.tsx
│   ├── RegisterPage.tsx
│   ├── ProfilePage.tsx
│   ├── portfolios/
│   └── screener/
├── test/
│   ├── handlers.ts           # MSW handlers
│   └── test-utils.tsx
└── styles.css

Точка входа

main.tsx рендерит App.tsx, который содержит BrowserRouterAppRoutes.