Skip to main content

Architecture Overview

⚠️ Документация в процессе наполнения

Общая архитектура GOLOOT

Компоненты системы

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

СлойТехнологияПочему выбрано
BackendFastify + TypeScriptTODO
ORMPrismaTODO
DatabasePostgreSQLTODO
CacheRedisTODO
FrontendReact + ViteTODO
StateZustand + TanStack QueryTODO
BotgrammyTODO

Loading System

LoadingOrchestrator Pattern

Централизованное управление состоянием загрузки через LoadingOrchestrator компонент (frontend).

Ключевая идея: Системные проверки (maintenance, season) выполняются до загрузки Bootstrap, чтобы предотвратить бесполезные запросы к БД и показать правильный UI сразу.

Loading Hierarchy

System-Level vs Business-Level Checks

УровеньШагПроверкаБлокирует Bootstrap?Пример
SystemSTEP 0Maintenance Mode✅ ДаТехнические работы
SystemSTEP 0.5Season Availability✅ ДаНет активного сезона
BusinessSTEP 1-NOnboarding (Bot, Subscription)✅ ДаАктивация бота
DataFinalBootstrap (Profile, Cases, Quests, etc.)8 параллельных запросов

Критическое отличие:

  • System-level — проверяют доступность всей системы (без активного сезона игры нет)
  • Business-level — проверяют состояние конкретного пользователя (активирован ли бот)

Graceful Degradation Principle

Правило: Если проверка упала с ошибкой — не блокировать пользователя.

// ✅ ПРАВИЛЬНО: при ошибке возвращаем безопасный default
try {
const status = await checkMaintenance();
return { isActive: status.isActive, bypassed: status.bypassed };
} catch (error) {
console.error('Check failed:', error);
return { isActive: false }; // Не блокируем пользователя
}

// ❌ НЕПРАВИЛЬНО: при ошибке блокируем всех
try {
const status = await checkMaintenance();
return status;
} catch (error) {
throw error; // Приложение не загрузится для ВСЕХ пользователей
}

Зачем: Предотвращает ситуацию, когда баг в системной проверке (или временная недоступность API) блокирует доступ всем пользователям.

Loading States

Все состояния загрузки определены в frontend/src/types/loading.types.ts:

export type AppLoadingState =
| 'idle' // Ничего не загружается
| 'checking_maintenance' // ШАГ 0
| 'checking_season' // ШАГ 0.5
| 'creating_session' // Onboarding
| 'checking_bot'
| 'checking_subscription'
| 'activating_session'
| 'loading_profile'
| 'checking_ban'
| 'loading_bootstrap'; // Финальная загрузка данных

Каждое состояние имеет человекочитаемое сообщение в LOADING_MESSAGES.

Resource Savings

СценарийБез Early ChecksС Early ChecksЭкономия
Maintenance активенBootstrap (8 запросов) + показ overlayТолько /api/maintenance/status → overlay~8 DB queries, ~200ms
Season неактивенBootstrap (8 запросов) + 503 ошибки + overlayТолько /api/seasons/current → overlay~8 DB queries, ~200ms
Нормальная работаBootstrap2 проверки + Bootstrap+~100ms (незначительно)

Итог: Early checks добавляют ~100ms в нормальном режиме, но экономят ~200ms + снимают нагрузку с БД в критичных ситуациях.

Files

ФайлНазначение
frontend/src/components/LoadingOrchestrator.tsxУправление загрузкой, системные проверки
frontend/src/types/loading.types.tsТипы состояний загрузки
frontend/src/components/MaintenanceOverlay.tsxOverlay для maintenance mode
frontend/src/components/SeasonCountdownOverlay.tsxOverlay для inter-season периодов
frontend/src/hooks/useMaintenance.tsReact Query hook для maintenance
frontend/src/hooks/useSeason.tsReact Query hook для season

Связанные документы

  • Domain Structure — стандарт структуры домена (эталон: achievements)
  • Common Structure — стандарт структуры common/ директории
  • Observability — логирование, метрики, трейсинг (Loki, Prometheus, Tempo)
  • Security Matrix — сводная матрица защит по всем доменам
  • Redis Integration — стратегия использования Redis
  • Tier System — единая система редкости предметов
  • Docs Deployment — CI/CD для документации
  • Data Sync — синхронизация данных TMA ↔ Backend (Bootstrap, SSE, Optimistic Updates)

Планируется:

  • Tech Stack Decisions