196 lines
15 KiB
Plaintext
196 lines
15 KiB
Plaintext
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 |