From 40c324d7fefad7fdc16e399c04debf99a512157a Mon Sep 17 00:00:00 2001 From: minin Date: Wed, 12 Aug 2026 19:24:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20arhitecture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arhitecture | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 arhitecture diff --git a/arhitecture b/arhitecture new file mode 100644 index 0000000..e748e98 --- /dev/null +++ b/arhitecture @@ -0,0 +1,196 @@ +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 \ No newline at end of file