Skip to content

Архитектура Unishift Platform

Микросервисная платформа для управления пространствами, документами, задачами и аутентификацией пользователей.

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

Architecture Diagram

Сервисы

СервисПортОписаниеДокументация
Gateway8090API шлюз, авторизация, проксированиеgateway.md
Auth8091Аутентификация и авторизацияauth.md
Spaces8092Управление рабочими пространствамиspaces.md
Documents8093Управление документамиdocuments.md
Command Manager8094Управление командами и задачамиcommand-manager.md
Scheduler8095Календари и планированиеscheduler.md
Storage8096Хранение файловstorage.md
Env Manager8097Хранение конфигураций/secretsenv-manager.md
Flow Manager8099Оркестрация пайплайновflow-manager.md
Spark Grid8087Медиафайлы и метаданныеspark-grid.md
AI Router8101LLM-маршрутизация, чаты, RAGai-router.md
Centrifugo8100Real-time доставка событийcentrifugo.md
NATS BridgeМост NATS → Centrifugonats-bridge.md

Инфраструктурные компоненты

КомпонентПортОписание
NATS4222Шина сообщений (event-driven архитектура)
PostgreSQL5432Реляционная база данных (с расширением pgvector)
MinIO9000/9001S3-совместимое хранилище файлов
Centrifugo8100Real-time WebSocket сервер

Технологический стек

КомпонентТехнология
ЯзыкGo 1.24-1.26
HTTP фреймворкGin
ORMGORM
БДPostgreSQL 16+ (pgvector для AI Router)
МессенджерNATS
Real-timeCentrifugo (WebSocket)
ШифрованиеXChaCha20-Poly1305
JWTgolang-jwt/jwt/v5
API документацияSwagger/OpenAPI
КонтейнеризацияDocker + Docker Compose

Общие модули (service-common)

Модуль шаринга (service-common/sharing)

Унифицированный модуль для реализации шаринга ресурсов между пользователями с поддержкой ролей.

Компоненты:

  • model.go — базовая модель SharedUser с ролями admin / user / viewer
  • repository.go — generic CRUD операции через GORM
  • usecase.go — бизнес-логика шаринга (проверка владельца, валидация ролей)
  • migration.go — хелперы для создания таблиц шаринга
  • dto.go — DTO для API запросов/ответов

Использование в сервисах:

go
// 1. Создать entity с embedding
type CalendarUser struct {
    sharing.SharedUser
    CalendarID uuid.UUID `gorm:"type:char(36);not null;index"`
}

func (CalendarUser) GetTableName() string     { return "calendar_users" }
func (CalendarUser) GetResourceColumn() string { return "calendar_id" }

// 2. Создать repository
repo := sharing.NewSharedUserRepository(db, logger)

// 3. Использовать в usecase
uc := sharing.NewSharingUseCase(repo, logger)
uc.Share(CalendarUser{}, calendarID, ownerID, users, isOwnerFunc)

Сервисы, использующие модуль:

  • command-manager — команды и коллекции
  • scheduler — календари
  • spaces — пространства (миграция из JSONB)
  • env-manager — конфигурации (миграция из JSONB)