Перейти к содержанию
Версия: 3.3.51 Обновлено: 2026-01-23

Архитектура Saga - Единый источник истины

Обзор проекта

Saga — современная инвестиционная DeFi-платформа с унифицированной архитектурой, построенная на принципах Clean Architecture, автоматической генерации типов и реального интеграционного тестирования.

Золотые правила архитектуры

1. ЕДИНЫЙ API (REST-only)

  • Протокол: Только REST API, JSON-RPC полностью удалён
  • Endpoints: Консолидированы в backend/shared/routing/
  • Стандарты: HTTP методы (GET, POST, PUT, DELETE), JSON запросы/ответы
  • Никаких RPC или GraphQL

2. ЕДИНЫЕ МОДЕЛИ ДАННЫХ

  • Источник истины: backend/shared/models/ — единственное место для Go структур
  • Автогенерация: TypeScript типы генерируются из Go структур через cmd/typegen
  • Синхронизация: Команда make generate-types после изменения Go моделей
  • Никаких дублирующих определений типов

3. ЧИСТАЯ АРХИТЕКТУРА

Запросы обрабатываются строго по цепочке:

HTTP Handler → Service (Business Logic) → Repository (SQL)
- Handlers: Только парсинг запросов и вызов сервисов - Services: Только бизнес-логика и валидация
- Repositories: Только SQL запросы к БД - Никакой бизнес-логики в хендлерах, никакого SQL в сервисах

4. РЕАЛЬНЫЕ ТЕСТЫ

  • Интеграционные тесты как основной слой — используют реальный HTTP сервер и тестовую PostgreSQL БД
  • Unit-тесты — только для утилит и чистых функций
  • E2E тесты — только для критических пользовательских путей
  • Никаких моков для внутренних компонентов

🏛️ Слоистая архитектура

flowchart TB
    subgraph FRONTEND["Frontend Layer"]
        UA["User App<br/>(Next.js :3000)"]
        AA["Admin App<br/>(Next.js :3001)"]
    end

    subgraph API["API Layer"]
        CR["CompositeRouter"]
        UR["UserRouter"]
        AR["AdminRouter"]
        AUR["AuthRouter"]
    end

    subgraph BUSINESS["Business Layer"]
        AS["AuthService"]
        IS["InvestmentService"]
        NS["NotificationService"]
        SS["StorageService"]
    end

    subgraph DATA["Data Layer"]
        URep["UserRepository"]
        IRep["InvestmentRepository"]
        TRep["TransactionRepository"]
    end

    DB[("PostgreSQL + JSONB")]

    FRONTEND -->|REST API| API
    API -->|Service calls| BUSINESS
    BUSINESS -->|Repository calls| DATA
    DATA -->|SQL queries| DB

    style FRONTEND fill:#e3f2fd
    style API fill:#fff3e0
    style BUSINESS fill:#e8f5e9
    style DATA fill:#fce4ec

Структура проекта (АКТУАЛЬНАЯ)

Saga/
├── backend/                          # Монолитный Go сервер
│   ├── cmd/                         # Исполняемые команды
│   │   ├── typegen/                # Генератор TypeScript типов
│   │   ├── migrate/                # Управление миграциями БД
│   │   └── saga/                   # Основной сервер
│   │       └── main.go            # Точка входа сервера
│   ├── main                        # Исполняемый файл backend
│   ├── config.yaml                 # Конфигурация приложения
│   ├── shared/                     # Унифицированные компоненты
│   │   ├── models/                # ЕДИНЫЕ модели данных (источник истины)
│   │   ├── routing/               # Консолидированные роутеры
│   │   │   ├── composite_router.go # Главный роутер
│   │   │   ├── user_router.go     # Пользовательские операции
│   │   │   ├── admin_router.go    # Административные операции
│   │   │   └── auth_router.go     # Аутентификация
│   │   └── services/              # Бизнес-сервисы
│   ├── storage/                    # Слой данных
│   │   ├── repository/            # Только SQL запросы
│   │   ├── interfaces/            # Интерфейсы репозиториев
│   │   └── migrations/            # Миграции БД
│   ├── auth/                      # Модуль аутентификации
│   │   ├── service/               # Бизнес-логика аутентификации
│   │   └── repository/            # SQL запросы для auth
│   ├── crypto2b/                  # Интеграция Crypto2B (deposits)
│   │   └── service.go             # Crypto2B API клиент
│   ├── fordefi/                   # Интеграция Fordefi (withdrawals)
│   │   └── client.go              # Fordefi API клиент
│   └── notification/              # Модуль уведомлений
│       ├── service/               # Email и push уведомления
│       └── repository/            # Уведомления в БД
├── frontend/                        # Frontend приложения
│   ├── shared/                     # Общие компоненты
│   │   ├── types/                 # Автогенерированные TypeScript типы
│   │   │   ├── generated-types.ts # Сгенерированные из Go
│   │   │   └── unified-types.ts   # Унифицированные экспорты
│   │   ├── components/            # Переиспользуемые компоненты
│   │   └── lib/                   # Общие утилиты
│   ├── user-app/                  # Пользовательское приложение
│   │   ├── src/app/               # Next.js App Router
│   │   └── src/components/        # Компоненты пользователя
│   └── admin-app/                 # Административная панель
│       ├── src/app/               # Next.js App Router
│       └── src/components/        # Компоненты админки
├── scripts/                        # Скрипты автоматизации
│   ├── run-dev-monolith.sh        # Единый скрипт запуска dev среды
│   └── update-types.sh            # Генерация TypeScript типов
└── docs/                           # Централизованная документация
    ├── architecture/              # Архитектурные решения
    ├── guides/                    # Руководства разработчика
    ├── modules/                   # Документация модулей
    └── archive/                   # Архив отчётов

Процессы разработки

Основные команды

make build-container  # Запуск единого контейнера (Cloud Native)
make test-smoke    # Быстрые критичные тесты (~8 сек)
make test-core     # Основные тесты (~1-2 мин)
make test-all      # Полное тестирование (~10+ мин)
make generate-types # Генерация TypeScript типов из Go

Workflow добавления функций

  1. Модель: Создать Go структуру в shared/models/
  2. Repository: Добавить SQL в storage/repository/
  3. Service: Реализовать бизнес-логику
  4. Handler: Добавить HTTP endpoint в роутер
  5. Типы: make generate-types
  6. Тест: Создать интеграционный тест

Безопасность Integration-Only

Enterprise Security Architecture

  • Никаких приватных ключей на Saga платформе
  • Fordefi Enterprise Custody - multi-signature security для withdrawals
  • Crypto2B API - enterprise депозитные операции с webhook verification
  • Supabase Auth - SOC 2 Type II compliance для аутентификации

API Security Best Practices

  • ВСЕГДА проверяй exit code команд: echo "Exit code: $?"
  • НИКОГДА не считай API responses successful по умолчанию
  • Неизвестный статус = failed, НЕ successful
  • Валидируй webhook signatures от external провайдеров

Пирамида тестирования

%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '14px'}}}%%
graph TB
    subgraph PYRAMID["Testing Pyramid"]
        E2E["🔝 E2E (Few)<br/>Critical paths only"]
        INT["⭐ Integration (Many)<br/>ОСНОВНОЙ СЛОЙ<br/>Реальные HTTP + БД тесты"]
        UNIT["📦 Unit (Some)<br/>Чистые функции и утилиты"]
    end

    E2E --> INT
    INT --> UNIT

    style INT fill:#90EE90,stroke:#228B22,stroke-width:3px
    style E2E fill:#FFB6C1
    style UNIT fill:#87CEEB

Типы тестов

  • Smoke (8 сек): Критичная проверка перед коммитом
  • Core (1-2 мин): Важные изменения в коде
  • Integration: Основной слой - реальный сервер + тестовая БД
  • E2E: Только критические пользовательские пути
  • Advanced: Mutation, Property-based, Contract тесты

Принципы качества

Краткость

  • Минимизация вывода токенов
  • Избегание ненужных пояснений
  • Фокус на конкретных задачах

Точность

  • Проверка реального состояния системы
  • Поиск первопричин проблем
  • Доверие фактам, а не сообщениям об ошибках

Эффективность

  • Использование абсолютных путей
  • Параллельное выполнение команд где возможно
  • Пакетирование tool calls в одном сообщении

Цель архитектуры: Простая, понятная, масштабируемая система без технического долга.

Детальные критические пути

Для понимания работы системы от запроса до ответа см. документацию критических путей:

🎯 Основная архитектура

Критические пути

  • Authentication Flow - Email-first аутентификация через Supabase Auth
  • Deposits Flow - Crypto2B API интеграция с webhook уведомлениями
  • Withdrawals Flow - Fordefi enterprise custody с админ approval

Каждый документ содержит sequence диаграммы, схемы БД, security checklist'ы и troubleshooting guide.