Sergey Krylov a1377fa5c2 feat(frontend): allow aria-label on BrokerDashboardCard
Support setting an accessible name on the dashboard card section so
consumers can query sections via getByLabelText in tests and assistive
tech, matching the hero pattern in BrokerDashboardHero.
2026-06-27 13:44:25 +03:00

MoexVibe

Веб-приложение для анализа ценных бумаг Московской биржи (MOEX).

Содержание


О проекте

npm workspaces монорепозиторий:

Пакет Назначение
apps/backend NestJS API (единственная точка доступа к MOEX ISS)
apps/frontend React SPA на Vite
apps/docs Сайт документации Docusaurus
packages/design-system Дизайн-система (Storybook, MUI-адаптер, UI-компоненты)

Стек технологий

  • Бэкенд: NestJS, TypeScript, OpenAPI (Swagger)
  • Фронтенд: React, TypeScript, Vite, TanStack Query, lightweight-charts
  • Дизайн-система: MUI v7, Storybook 10, lightweight-charts
  • Документация: Docusaurus
  • Инфраструктура: Docker, docker-compose

Быстрый старт

# Настройка локального окружения
cp apps/backend/.env.example apps/backend/.env

# Установка зависимостей и подготовка базы данных
npm install
npm exec -w apps/backend -- prisma migrate dev

# Запуск бэкенда (http://localhost:3000)
npm run dev:backend

# Запуск фронтенда (http://localhost:5173)
npm run dev:frontend

Swagger UI: http://localhost:3000/api/docs


Docker

docker compose up --build

Тестирование

npm run test:backend
npm run test:frontend

Интеграционные тесты с MOEX — опциональны:

npm run test:integration -w apps/backend

Структура проекта

apps/
  backend/         — NestJS API, единая точка доступа к MOEX ISS
  frontend/        — React SPA на Vite
  docs/            — сайт документации Docusaurus
packages/
  design-system/   — дизайн-система (MUI-адаптер, UI-компоненты, Storybook)
docs/
  features/    — спецификации и планы реализации (SDD)
  epics/       — продуктовые эпики
  inbox.md     — идеи и заметки
  roadmap.md   — запланированные эпики и фичи

Команды

Команда Что делает
npm run dev:backend Запуск NestJS в режиме watch на :3000
npm run dev:frontend Vite dev-сервер на :5173, проксирует /api → :3000
npm run dev:docs Docusaurus dev-сервер (опубликованная документация)
npm run build:backend nest build
npm run build:frontend tsc -b && vite build (в две фазы)
npm run build:docs docusaurus build
npm run build:design-system Сборка дизайн-системы (tsc)
npm run build:storybook Статическая сборка Storybook
npm run test:backend vitest run (SWC, не ts-jest)
npm run test:frontend Frontend Vitest suite
npm run test:design-system Unit-тесты дизайн-системы (Vitest)
npm run test:storybook Браузерные тесты Storybook (Vitest browser mode + Playwright)
npm run storybook Storybook dev-сервер на :6006 (инженерный workbench, не docs)
npm run lint ESLint для backend, frontend и design-system
npm run lint:design-system ESLint для дизайн-системы
npm run format Prettier для всех *.{ts,tsx}
npm run codegen -w apps/frontend openapi-typescript из запущенного локального Swagger → src/api/types.ts

graphify-out/ — локальный артефакт знания, он не хранится в git. В новом worktree сначала собери его заново: graphify extract .; дальше обновляй инкрементально: graphify update .. Для вопросов по коду используй graphify query "...".

Docusaurus (apps/docs) — опубликованная документация для пользователей. Storybook (packages/design-system) — инженерный workbench для разработки компонентов.

Интеграционные тесты с MOEX: npm run test:integration -w apps/backend.

Один backend-тест: npm exec -w apps/backend -- vitest run src/path/to/test.spec.ts


Переменные окружения

Переменная По умолчанию Описание
PORT 3000 Порт бэкенда
MOEX_BASE_URL https://iss.moex.com/iss Адрес MOEX ISS
MOEX_RATE_LIMIT 10 Запросов/с к MOEX
MOEX_CIRCUIT_BREAKER_THRESHOLD 5 Ошибок до открытия circuit breaker
MOEX_CIRCUIT_BREAKER_RESET_SECONDS 30 Секунд до попытки закрыть circuit breaker
T_BANK_TOKEN '' Токен T-Bank Invest (серверный)
T_BANK_BASE_URL invest-public-api.tbank.ru:443 gRPC endpoint T-Bank Invest
T_BANK_CA_CERT_PATH '' Путь к PEM root CA для gRPC TLS
T_BANK_APP_NAME ksv741.moex-vibe Имя приложения для T-Bank
T_BANK_RATE_LIMIT_PER_SECOND 5 Rate limiter для OperationsService и UsersService (запросов/с)
T_BANK_INSTRUMENTS_RATE_LIMIT 20 Rate limiter для InstrumentsService (запросов/с)
T_BANK_REQUEST_TIMEOUT_MS 10000 Таймаут gRPC-запроса (мс)
CACHE_MARKET_DATA_TTL 900 TTL рыночных данных (с)
CACHE_HISTORY_TTL 3600 TTL истории (с)
CACHE_CANDLES_TTL 3600 TTL свечей (с)
CACHE_SECURITY_TTL 86400 TTL спецификации (с)
CACHE_SEARCH_TTL 3600 TTL результатов поиска (с)
CACHE_DIVIDENDS_TTL 86400 TTL дивидендных данных (с)
CACHE_TBANK_ACCOUNTS_TTL 3600 TTL брокерских счетов T-Bank (с)
CACHE_TBANK_PORTFOLIO_TTL 60 TTL брокерского портфеля T-Bank (с)
CACHE_TBANK_OPERATIONS_TTL 300 TTL брокерских операций T-Bank (с)
CACHE_TBANK_POSITIONS_TTL 60 TTL брокерских позиций T-Bank (с)
CACHE_TBANK_INSTRUMENT_TTL 86400 TTL инструментов T-Bank (с)
DATABASE_URL file:./dev.db URL SQLite для Prisma
JWT_SECRET dev-jwt-secret-... Secret для access token
JWT_REFRESH_SECRET dev-refresh-secret-... Secret для refresh token
JWT_ACCESS_EXPIRES 15m TTL access token
JWT_REFRESH_EXPIRES 7d TTL refresh token
Description
No description provided
Readme 9.1 MiB
Languages
TypeScript 97.7%
Shell 1.2%
JavaScript 0.9%
CSS 0.2%