Бизнес-логика и потоки данных
Описание взаимодействия модулей и потоков данных в приложении.
Архитектура системы
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 endpointGateway Service- HTTP клиент к внешнему APIinteg-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- управление secretsCrypto 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- управление handlersGateway 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Особенности
- Полное проксирование - Integ API не хранит интеграции, только проксирует
- Шифрование - Secrets шифруются Crypto Module перед сохранением
- Кеширование - Часто используемые данные кешируются в Redis
- Обработка ошибок - Gateway Service обрабатывает ошибки и возвращает null
Безопасность
Уровни защиты
JWT Аутентификация - Защита REST API
- Только авторизованные пользователи
- Проверка на каждый запрос через JWT Guard
x-access-token - Защита взаимодействия с integ-core
- Хранится в Doppler (не в коде)
- Передается в каждом запросе к внешнему API
Encryption - Защита secrets
- Шифрование перед сохранением
- Использование Crypto Module
DTO Валидация - Защита от невалидных данных
- class-validator для валидации
- Отклонение некорректных запросов на уровне DTO
Производительность
Кеширование
typescript
// Redis cache через Shared Module
- Интеграции
- Secrets (с TTL)
- Handlers
// Инвалидация кеша при измененияхПагинация
typescript
// findMany всегда возвращает paginated результаты
{
data: [...],
totalCount: 100,
page: 1
}Следующие шаги
- Архитектурные паттерны - Паттерны проектирования
- Модули - Подробное описание модулей
- API Guide - Работа с API