Files
front/arhitecture
2026-08-12 19:39:44 +03:00

219 lines
15 KiB
Plaintext
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.
Категория Файлов
API Types 14
API Endpoints 14
Stores 9
Hooks 9
Common Components 13
Layout Components 5
Auth Components 4
Match Components 7
Scoreboard Components 4
Services Components 3
Training Components 6
Analytics Components 6
Logs Components 5
Team Components 4
Profile Components 3
Pages 20
Utils 5
ИТОГО 145+ файлов
src/
├── api/ # API-клиент
│ ├── axios.ts # Настройка Axios instance, interceptors, base URL, refresh token
│ ├── endpoints/
│ │ ├── auth.api.ts # login, register, logout, refreshToken, getMe
│ │ ├── users.api.ts # getUser, updateProfile, getUserStats, getUserAchievements
│ │ ├── teams.api.ts # createTeam, joinTeam, leaveTeam, getTeam, getTeamMembers, inviteToTeam
│ │ ├── matches.api.ts # createMatch, getMatch, listMatches, startMatch, stopMatch, getMatchResults
│ │ ├── rounds.api.ts # getRound, listRounds, getRoundEvents
│ │ ├── services.api.ts # listServices, getService, uploadService, validateService, rateService
│ │ ├── scoreboard.api.ts # getScoreboard, getScoreHistory, getTeamScore
│ │ ├── flags.api.ts # submitFlag, getFlagHistory
│ │ ├── logs.api.ts # getLogs, getEventTimeline, getReplay
│ │ ├── training.api.ts # getTracks, getTrack, startExercise, submitExercise, getProgress
│ │ ├── analytics.api.ts # getTeamAnalytics, getPlayerAnalytics, getMatchAnalytics, getAIRecommendations
│ │ ├── admin.api.ts # adminGetUsers, adminCreateMatch, adminManageServices, adminGetSystemStats
│ │ └── notifications.api.ts # getNotifications, markRead, getUnreadCount
│ ├── websocket.ts # WebSocket подключение: scoreboard updates, round events, log stream, notifications
│ └── types/ # Все TypeScript типы и интерфейсы
│ ├── auth.types.ts # User, LoginRequest, RegisterRequest, AuthResponse, TokenPair
│ ├── team.types.ts # Team, TeamMember, TeamInvite, TeamRole
│ ├── match.types.ts # Match, MatchConfig, MatchStatus, MatchResult, ScoringPolicy
│ ├── round.types.ts # Round, RoundEvent, RoundStatus
│ ├── service.types.ts # Service, ServiceCategory, ServiceStatus, CheckerResult, ServiceReview
│ ├── scoreboard.types.ts # ScoreboardEntry, ScoreHistory, TeamScore, ScoreBreakdown
│ ├── flag.types.ts # Flag, FlagSubmission, FlagStatus
│ ├── log.types.ts # LogEntry, LogLevel, EventType, TimelineEvent, ReplayFrame
│ ├── training.types.ts # Track, Exercise, ExerciseResult, Progress, Skill, Role
│ ├── analytics.types.ts # TeamAnalytics, PlayerAnalytics, MatchAnalytics, AIRecommendation
│ └── common.types.ts # PaginatedResponse, ApiError, SortOrder, FilterParams
├── store/ # Zustand stores
│ ├── authStore.ts # user, tokens, isAuthenticated, login(), logout(), refreshToken()
│ ├── matchStore.ts # currentMatch, matches, rounds, matchStatus
│ ├── scoreboardStore.ts # scores, history, realtime updates via websocket
│ ├── serviceStore.ts # services, filters, categories, selected service
│ ├── logStore.ts # logs, timeline, replay state, filters
│ ├── teamStore.ts # currentTeam, members, invites
│ ├── trainingStore.ts # tracks, progress, currentExercise
│ ├── notificationStore.ts # notifications, unreadCount
│ └── uiStore.ts # theme, sidebar state, modals, loading states
├── hooks/ # Кастомные хуки
│ ├── useAuth.ts # Авторизация, проверка ролей, protected routes
│ ├── useWebSocket.ts # Подключение и подписки на WS-каналы
│ ├── useScoreboard.ts # Real-time scoreboard с WS
│ ├── useMatchTimer.ts # Таймер текущего раунда, countdown
│ ├── useLogs.ts # Подписка на стрим логов, фильтрация
│ ├── useReplay.ts # Управление replay: play, pause, seek, speed
│ ├── usePagination.ts # Пагинация для таблиц
│ ├── useDebounce.ts # Debounce для поиска
│ └── useNotifications.ts # Real-time уведомления
├── pages/ # Страницы
│ ├── auth/
│ │ ├── LoginPage.tsx
│ │ ├── RegisterPage.tsx
│ │ └── ForgotPasswordPage.tsx
│ ├── dashboard/
│ │ └── DashboardPage.tsx # Обзор: активные матчи, прогресс обучения, последние результаты, уведомления
│ ├── matches/
│ │ ├── MatchListPage.tsx # Список матчей: тренировочные, турнирные, скримы
│ │ ├── MatchDetailPage.tsx # Детали матча: scoreboard, раунды, события
│ │ ├── MatchLobbyPage.tsx # Лобби перед началом: настройки, команды, сервисы
│ │ ├── MatchLivePage.tsx # Живой матч: scoreboard, таймер, логи, статусы сервисов
│ │ └── MatchResultPage.tsx # Результаты: итоговый scoreboard, статистика, replay
│ ├── scoreboard/
│ │ └── ScoreboardPage.tsx # Полный scoreboard с графиками, фильтрами, историей по раундам
│ ├── services/
│ │ ├── ServiceCatalogPage.tsx # Каталог сервисов: поиск, фильтры, категории, рейтинг
│ │ ├── ServiceDetailPage.tsx # Карточка сервиса: описание, стек, уязвимости, отзывы, версии
│ │ ├── ServiceUploadPage.tsx # Загрузка нового сервиса: форма, валидация, превью
│ │ └── ServiceValidationPage.tsx # Статус валидации загруженного сервиса
│ ├── teams/
│ │ ├── TeamPage.tsx # Страница команды: участники, роли, история матчей
│ │ ├── TeamSettingsPage.tsx # Настройки команды: название, приглашения, роли
│ │ └── TeamSearchPage.tsx # Поиск команды для вступления
│ ├── training/
│ │ ├── TrainingHubPage.tsx # Обучение: все треки, прогресс, рекомендации
│ │ ├── TrackDetailPage.tsx # Конкретный трек: список упражнений, прогресс, описание роли
│ │ ├── ExercisePage.tsx # Выполнение упражнения: задание, терминал, подсказки, сдача
│ │ └── SkillMapPage.tsx # Карта навыков: что освоено, что осталось, рекомендации
│ ├── analytics/
│ │ ├── TeamAnalyticsPage.tsx # Аналитика команды: сильные/слабые стороны, тренды, сравнение
│ │ ├── PlayerAnalyticsPage.tsx # Персональная аналитика: навыки, прогресс, роли
│ │ ├── MatchAnalyticsPage.tsx # Аналитика матча: timeline, heatmap атак, AI-разбор
│ │ └── ReplayPage.tsx # Replay матча: таймлайн, события, графики, покадровый просмотр
│ ├── logs/
│ │ ├── LogViewerPage.tsx # Просмотр логов: фильтры, поиск, real-time стрим
│ │ └── EventTimelinePage.tsx # Таймлайн событий матча: визуальная шкала с событиями
│ ├── profile/
│ │ ├── ProfilePage.tsx # Профиль пользователя: статистика, достижения, история
│ │ └── SettingsPage.tsx # Настройки: аватар, пароль, уведомления, API-ключи
│ ├── admin/
│ │ ├── AdminDashboardPage.tsx # Админ-панель: системная статистика, активные матчи
│ │ ├── AdminUsersPage.tsx # Управление пользователями
│ │ ├── AdminMatchesPage.tsx # Управление матчами: создание, мониторинг, остановка
│ │ ├── AdminServicesPage.tsx # Модерация сервисов: очередь валидации, утверждение
│ │ └── AdminSystemPage.tsx # Системные настройки: конфигурация, health, метрики
│ ├── seasons/
│ │ ├── SeasonListPage.tsx # Список сезонов и лиг
│ │ └── SeasonDetailPage.tsx # Детали сезона: рейтинг, расписание, результаты
│ └── NotFoundPage.tsx
├── components/ # Компоненты
│ ├── layout/
│ │ ├── AppLayout.tsx # Основной layout: sidebar + header + content
│ │ ├── Sidebar.tsx # Боковое меню с навигацией и ролевыми секциями
│ │ ├── Header.tsx # Верхняя панель: поиск, уведомления, профиль, таймер матча
│ │ ├── Footer.tsx
│ │ └── MobileNav.tsx # Мобильная навигация
│ ├── auth/
│ │ ├── LoginForm.tsx
│ │ ├── RegisterForm.tsx
│ │ ├── ProtectedRoute.tsx # Обёртка для защищённых роутов
│ │ └── RoleGuard.tsx # Проверка роли пользователя для доступа
│ ├── match/
│ │ ├── MatchCard.tsx # Карточка матча в списке
│ │ ├── MatchTimer.tsx # Таймер раунда / матча
│ │ ├── MatchStatusBadge.tsx # Статус матча: lobby, running, finished
│ │ ├── RoundIndicator.tsx # Индикатор текущего раунда
│ │ ├── ServiceStatusGrid.tsx # Сетка статусов сервисов всех команд
│ │ ├── FlagSubmitForm.tsx # Форма отправки флага
│ │ └── MatchConfigForm.tsx # Форма настройки нового матча
│ ├── scoreboard/
│ │ ├── ScoreboardTable.tsx # Таблица scoreboard с сортировкой
│ │ ├── ScoreChart.tsx # График изменения очков по раундам
│ │ ├── TeamScoreCard.tsx # Карточка очков команды
│ │ └── ScoreBreakdown.tsx # Разбивка очков: attack / defense / SLA
│ ├── services/
│ │ ├── ServiceCard.tsx # Карточка сервиса в каталоге
│ │ ├── ServiceFilter.tsx # Фильтры: категория, сложность, стек, рейтинг
│ │ ├── ServiceUploadForm.tsx # Форма загрузки сервиса
│ │ ├── ServiceReviewCard.tsx # Отзыв о сервисе
│ │ ├── ServiceStatusIndicator.tsx # Индикатор статуса checker'а
│ │ └── ServiceVersionHistory.tsx # История версий сервиса
│ ├── training/
│ │ ├── TrackCard.tsx # Карточка учебного трека
│ │ ├── ExerciseCard.tsx # Карточка упражнения
│ │ ├── ProgressBar.tsx # Прогресс-бар обучения
│ │ ├── SkillRadarChart.tsx # Радарная диаграмма навыков
│ │ ├── RoleBadge.tsx # Бейдж роли: attacker, defender, analyst и т.д.
│ │ └── HintAccordion.tsx # Аккордеон с подсказками (постепенное раскрытие)
│ ├── analytics/
│ │ ├── AnalyticsCard.tsx # Карточка метрики
│ │ ├── TeamComparisonChart.tsx # Сравнение команд
│ │ ├── AttackHeatmap.tsx # Heatmap атак по сервисам и раундам
│ │ ├── SLAChart.tsx # График SLA по сервисам
│ │ ├── AIRecommendationCard.tsx # Карточка AI-рекомендации
│ │ └── PerformanceTrend.tsx # Тренд производительности
│ ├── logs/
│ │ ├── LogStream.tsx # Real-time стрим логов
│ │ ├── LogEntry.tsx # Одна запись лога
│ │ ├── LogFilter.tsx # Фильтры логов: тип, уровень, сервис, команда
│ │ ├── EventTimeline.tsx # Визуальный таймлайн событий
│ │ └── ReplayControls.tsx # Кнопки управления replay: play, pause, speed, seek
│ ├── team/
│ │ ├── TeamMemberCard.tsx # Карточка участника команды
│ │ ├── TeamInviteForm.tsx # Форма приглашения в команду
│ │ ├── TeamRoleSelector.tsx # Выбор роли в команде
│ │ └── TeamMatchHistory.tsx # История матчей команды
│ ├── profile/
│ │ ├── AchievementBadge.tsx # Бейдж достижения
│ │ ├── ProfileStats.tsx # Статистика профиля
│ │ └── ActivityFeed.tsx # Лента активности
│ └── common/
│ ├── DataTable.tsx # Универсальная таблица с сортировкой, пагинацией, фильтрами
│ ├── SearchInput.tsx # Поиск с debounce
│ ├── ConfirmDialog.tsx # Диалог подтверждения
│ ├── EmptyState.tsx # Заглушка "нет данных"
│ ├── ErrorBoundary.tsx # Обработка ошибок
│ ├── LoadingSpinner.tsx
│ ├── LoadingSkeleton.tsx # Скелетоны для загрузки
│ ├── StatusBadge.tsx # Универсальный бейдж статуса
│ ├── CopyButton.tsx # Кнопка копирования
│ ├── ThemeToggle.tsx # Переключатель темы
│ ├── Breadcrumbs.tsx
│ ├── Countdown.tsx # Универсальный countdown-таймер
│ └── MarkdownRenderer.tsx # Рендер markdown для описаний
├── router/
│ └── index.tsx # Все роуты, lazy loading, protected routes, role-based access
├── utils/
│ ├── formatters.ts # Форматирование дат, чисел, длительности
│ ├── validators.ts # Вспомогательные валидаторы
│ ├── constants.ts # Константы: роли, статусы, категории сервисов, уровни логов
│ ├── helpers.ts # Утилиты
│ └── colors.ts # Цветовая палитра для команд, статусов, графиков
├── styles/
│ └── globals.css # Tailwind base + кастомные стили, тёмная тема
├── App.tsx
├── main.tsx
└── vite-env.d.ts