Skip to content

Бизнес-логика и потоки данных

Описание взаимодействия модулей и потоков данных в приложении.

Архитектура системы

mermaid
flowchart LR
    Admin["Admin Panel<br/>(React/Vue)"]
    IntegAPI["Integ API<br/>(NestJS)"]
    GatewayService["Gateway Service<br/>(HTTP клиент)"]
    IntegCore["integ-core<br/>(External API)"]
    DB["PostgreSQL<br/>(Database)"]

    Admin -->|REST API| IntegAPI
    IntegAPI -->|Proxy| GatewayService
    GatewayService -->|HTTP (x-access-token)| IntegCore
    IntegAPI -->|CRUD| DB

Основные потоки данных

1. Аутентификация и авторизация

mermaid
sequenceDiagram
    participant User as Пользователь
    participant Admin as Admin Panel
    participant Auth as Auth Module
    participant UsersService as Users Service
    participant DB as PostgreSQL

    User->>Admin: Вход (email, password)
    Admin->>Auth: POST /api/auth/sign-in
    Auth->>UsersService: Поиск пользователя
    UsersService->>DB: SELECT * FROM users
    DB-->>UsersService: User Entity
    UsersService-->>Auth: IUser Interface
    Auth->>Auth: Проверка пароля (bcryptjs)
    Auth->>Auth: Генерация JWT токена
    Auth-->>Admin: { accessToken, user }
    Admin->>Admin: Сохранение токена
    Admin->>Admin: Редирект на Dashboard

Компоненты:

  • Auth Module - логика аутентификации
  • JWT Guard - проверка токена на каждый запрос
  • Users Service - работа с пользователями в БД

Результат: Пользователь получает JWT токен, который использует для всех последующих запросов.

2. Получение списка интеграций

mermaid
sequenceDiagram
    participant Admin as Admin Panel
    participant IntegAPI as Integrations Module
    participant GatewayService as Gateway Service
    participant IntegCore as integ-core API

    Admin->>IntegAPI: GET /api/integrations
    IntegAPI->>IntegAPI: JWT Guard проверка
    IntegAPI->>GatewayService: listIntegrations()
    GatewayService->>IntegCore: GET /admin/integrations<br/>(Header: x-access-token)
    IntegCore-->>GatewayService: [IIntegCoreIntegration]
    GatewayService-->>IntegAPI: Результат
    IntegAPI-->>Admin: JSON с интеграциями

Компоненты:

  • Integrations Controller - REST endpoint
  • Gateway Service - HTTP клиент к внешнему API
  • integ-core - внешний сервис с интеграциями

Ключевые моменты:

  • Все запросы требуют JWT аутентификацию
  • Gateway Service использует custom header x-access-token
  • Данные проксируются напрямую от integ-core

3. Создание secret для интеграции

mermaid
sequenceDiagram
    participant Admin as Admin Panel
    participant IntegAPI as Secrets API
    participant SecretsService as Secrets Service
    participant CryptoModule as Crypto Module
    participant D1 as Cloudflare D1

    Admin->>IntegAPI: POST /api/secrets
    IntegAPI->>IntegAPI: JWT Guard + Validate DTO
    IntegAPI->>SecretsService: create(integration, key, value)
    SecretsService->>CryptoModule: encrypt(value)
    CryptoModule-->>SecretsService: encrypted_value
    SecretsService->>D1: INSERT INTO creds
    D1-->>SecretsService: { id }
    SecretsService-->>IntegAPI: Created Secret
    IntegAPI-->>Admin: { id, key, createdAt }

Компоненты:

  • Secrets Service - управление secrets
  • Crypto Module - шифрование чувствительных данных
  • Cloudflare D1 - хранилище secrets

Ключевые моменты:

  • Secrets шифруются перед сохранением
  • Secrets хранятся в Cloudflare D1 (таблица creds)
  • Вся коммуникация защищена JWT

4. Вызов handler интеграции

mermaid
sequenceDiagram
    participant Admin as Admin Panel
    participant IntegAPI as Integrations API
    participant HandlersService as Handlers Service
    participant GatewayService as Gateway Service
    participant IntegCore as integ-core

    Admin->>IntegAPI: POST /api/integrations/slack/invoke
    Admin->>IntegAPI: Body: { handler: "send_message", args: {...} }
    IntegAPI->>IntegAPI: JWT Guard + Validate DTO
    IntegAPI->>HandlersService: invokeHandler(integrationName, handler, args)
    HandlersService->>GatewayService: invokeHandler(integrationName, {...})
    GatewayService->>IntegCore: POST /admin/integrations/slack/invoke<br/>(x-access-token header)
    IntegCore-->>GatewayService: { success: true, data: {...} }
    GatewayService-->>HandlersService: Result
    HandlersService-->>IntegAPI: Результат
    IntegAPI-->>Admin: { success: true, data: {...} }

Компоненты:

  • Handlers Service - управление handlers
  • Gateway Service - проксирование к integ-core

Особенности:

  • Handlers могут иметь default arguments
  • Параметры динамичны (зависят от handler'а)
  • Все вызовы асинхронны

Роль каждого модуля в бизнес-процессе

Core Module

  • Инициализация приложения и БД
  • Конфигурация TypeORM для работы с PostgreSQL
  • Глобальные interceptors для обработки запросов

Auth Module

  • Регистрация новых пользователей
  • Вход (login) пользователей
  • Генерация JWT токенов
  • Проверка токенов (JWT Guard)

Users Module

  • Хранение информации о пользователях
  • CRUD операции с пользователями
  • Управление профилями

Integrations Module

  • REST API для управления интеграциями
  • Валидация входных данных (DTOs)
  • Проксирование запросов к Gateway Service

Gateway Service

  • HTTP клиент к integ-core
  • Управление access token для integ-core
  • Обработка ошибок при взаимодействии

Shared Module

  • Crypto - шифрование secrets
  • Redis - кеширование часто используемых данных
  • Swagger - документирование API
  • Base Entity - базовая структура для всех сущностей

MCP Module

  • AI интеграция через Model Context Protocol
  • Предоставление инструментов для AI моделей
  • Расширение функциональности для AI

Взаимодействие с integ-core

Архитектура

┌─────────────────┐
│   Admin Panel   │
└────────┬────────┘
         │ REST API

┌─────────────────────────────────┐
│     Integ API (NestJS)          │
│  ┌───────────────────────────┐  │
│  │ Integrations Controller   │  │
│  ├───────────────────────────┤  │
│  │ Gateway Service (Proxy)   │  │
│  │ + JWT Auth + Validation   │  │
│  └───────────────────────────┘  │
└────────┬────────────────────────┘
         │ HTTP x-access-token

┌──────────────────────────────────┐
│  integ-core (External API)       │
│  - Интеграции                    │
│  - Credentials                   │
│  - Handlers                      │
└──────────────────────────────────┘

Протокол взаимодействия

Аутентификация:

http
Header: x-access-token: <access-token>

Endpoints integ-core:

GET    /admin/integrations              # Список интеграций
GET    /admin/integrations/:name        # Одна интеграция
GET    /admin/integrations/:name/creds  # Credentials
POST   /admin/integrations/:name/creds  # Создать credential
PATCH  /admin/integrations/:name/creds/:key     # Обновить
DELETE /admin/integrations/:name/creds/:key     # Удалить
GET    /admin/integrations/:name/handlers       # Handlers
POST   /admin/integrations/:name/invoke         # Invoke handler

Особенности

  1. Полное проксирование - Integ API не хранит интеграции, только проксирует
  2. Шифрование - Secrets шифруются Crypto Module перед сохранением
  3. Кеширование - Часто используемые данные кешируются в Redis
  4. Обработка ошибок - Gateway Service обрабатывает ошибки и возвращает null

Безопасность

Уровни защиты

  1. JWT Аутентификация - Защита REST API

    • Только авторизованные пользователи
    • Проверка на каждый запрос через JWT Guard
  2. x-access-token - Защита взаимодействия с integ-core

    • Хранится в Doppler (не в коде)
    • Передается в каждом запросе к внешнему API
  3. Encryption - Защита secrets

    • Шифрование перед сохранением
    • Использование Crypto Module
  4. DTO Валидация - Защита от невалидных данных

    • class-validator для валидации
    • Отклонение некорректных запросов на уровне DTO

Производительность

Кеширование

typescript
// Redis cache через Shared Module
- Интеграции
- SecretsTTL)
- Handlers

// Инвалидация кеша при изменениях

Пагинация

typescript
// findMany всегда возвращает paginated результаты
{
  data: [...],
  totalCount: 100,
  page: 1
}

Следующие шаги