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

Сервисы
| Сервис | Порт | Описание | Документация |
|---|---|---|---|
| Gateway | 8090 | API шлюз, авторизация, проксирование | gateway.md |
| Auth | 8091 | Аутентификация и авторизация | auth.md |
| Spaces | 8092 | Управление рабочими пространствами | spaces.md |
| Documents | 8093 | Управление документами | documents.md |
| Command Manager | 8094 | Управление командами и задачами | command-manager.md |
| Scheduler | 8095 | Календари и планирование | scheduler.md |
| Storage | 8096 | Хранение файлов | storage.md |
| Env Manager | 8097 | Хранение конфигураций/secrets | env-manager.md |
| Flow Manager | 8099 | Оркестрация пайплайнов | flow-manager.md |
| Spark Grid | 8087 | Медиафайлы и метаданные | spark-grid.md |
| AI Router | 8101 | LLM-маршрутизация, чаты, RAG | ai-router.md |
| Centrifugo | 8100 | Real-time доставка событий | centrifugo.md |
| NATS Bridge | — | Мост NATS → Centrifugo | nats-bridge.md |
Инфраструктурные компоненты
| Компонент | Порт | Описание |
|---|---|---|
| NATS | 4222 | Шина сообщений (event-driven архитектура) |
| PostgreSQL | 5432 | Реляционная база данных (с расширением pgvector) |
| MinIO | 9000/9001 | S3-совместимое хранилище файлов |
| Centrifugo | 8100 | Real-time WebSocket сервер |
Технологический стек
| Компонент | Технология |
|---|---|
| Язык | Go 1.24-1.26 |
| HTTP фреймворк | Gin |
| ORM | GORM |
| БД | PostgreSQL 16+ (pgvector для AI Router) |
| Мессенджер | NATS |
| Real-time | Centrifugo (WebSocket) |
| Шифрование | XChaCha20-Poly1305 |
| JWT | golang-jwt/jwt/v5 |
| API документация | Swagger/OpenAPI |
| Контейнеризация | Docker + Docker Compose |
Общие модули (service-common)
Модуль шаринга (service-common/sharing)
Унифицированный модуль для реализации шаринга ресурсов между пользователями с поддержкой ролей.
Компоненты:
model.go— базовая модельSharedUserс ролямиadmin/user/viewerrepository.go— generic CRUD операции через GORMusecase.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)