Files
mono/components/controller
Alex Ant eb16d85abc fix(install): разблокировать мастер при прерванной установке и валидировать состав совета по окружению.
Не показываем заглушку техобслуживания на /install, разрешаем повтор install из maintenance без vars, проверяем минимум членов совета до записи в цепь (3 на prod, 1 на dev).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:35:01 +05:00
..
2026-03-23 00:40:49 +05:00
2026-01-20 21:23:02 +05:00
2026-03-23 15:52:27 +05:00
2026-03-19 18:50:42 +05:00
2026-06-16 08:11:23 +00:00
2026-06-16 08:11:23 +00:00
2025-10-07 19:41:54 +05:00
2026-01-23 13:00:24 +05:00

🎛️ @coopenomics/controller

Основной бэкенд-сервис платформы «Цифровой Кооператив». GraphQL API на NestJS с чистой архитектурой — обрабатывает все запросы от рабочего стола, управляет кооперативными процессами, генерирует документы и взаимодействует с блокчейном EOSIO.

Основные возможности

  • GraphQL API для всех операций платформы
  • Чистая архитектура: domain → infrastructure → modules
  • Управление пайщиками, кошельками и финансовыми операциями
  • Электронный документооборот с ЭП через блокчейн
  • Система расширений (extensions) для модульного подключения функциональности
  • Платёжный шлюз с поддержкой нескольких провайдеров
  • JWT-аутентификация и авторизация
  • Миграции данных через TypeORM
  • Интеграция с Novu для уведомлений и LiveKit для видеоконференций

Установка

Компонент является частью монорепозитория. Установка зависимостей из корня проекта:

pnpm install

Или только для этого компонента:

pnpm install --filter @coopenomics/controller

Скрипты

Скрипт Команда Описание
dev pnpm run dev Запуск в режиме разработки (nodemon + ts-node)
start pnpm run start Запуск в production-режиме
lint pnpm run lint Проверка кода (ESLint)
lint:fix pnpm run lint:fix Автоисправление lint-ошибок
typecheck pnpm run typecheck Проверка типов TypeScript
migration:generate pnpm run migration:generate Генерация новой миграции
migration:run pnpm run migration:run Применение всех миграций
migration:status pnpm run migration:status Текущий статус миграций
migration:rollback pnpm run migration:rollback Откат миграций
migration:list pnpm run migration:list Список всех миграций
docs pnpm run docs Генерация документации API (SpectaQL)

Конфигурация

Скопируйте .env-example в .env и настройте переменные окружения:

  • Строки подключения к MongoDB, реляционной БД, Redis
  • Endpoint блокчейн-ноды и CHAIN_ID
  • VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY — ключи для push-уведомлений
  • Настройки JWT-аутентификации
  • Конфигурация платёжных провайдеров
  • Настройки Sentry для мониторинга ошибок

Подробное описание переменных — в файле .env-example.

Тестирование

Интеграционные тесты выполняются через компонент @coopenomics/boot, который разворачивает полную инфраструктуру:

pnpm --filter @coopenomics/boot run test

Архитектура

Проект следует принципам чистой архитектуры с направлением зависимостей внутрь (к домену):

src/
├── domain/                # Доменный слой (бизнес-логика)
│   ├── account/           # Аккаунты пользователей
│   ├── agreement/         # Соглашения
│   ├── auth/              # Аутентификация
│   ├── blockchain/        # Интерфейсы блокчейна
│   ├── branch/            # Кооперативные участки
│   ├── capital/           # Паевые взносы
│   ├── cooplace/          # Маркетплейс
│   ├── document/          # Документооборот
│   ├── extension/         # Расширения
│   ├── gateway/           # Платёжный шлюз
│   ├── ledger/            # Бухгалтерский учёт
│   ├── meet/              # Собрания
│   ├── participant/       # Участники кооператива
│   ├── registration/      # Регистрация
│   ├── wallet/            # Кошельки
│   └── common/            # Общие порты и репозитории
├── infrastructure/        # Инфраструктурный слой (адаптеры)
│   ├── blockchain/        # Адаптер блокчейна EOSIO
│   ├── database/          # Адаптеры БД (Mongoose, TypeORM)
│   └── external/          # Внешние сервисы
├── modules/               # Прикладной слой (NestJS-модули)
│   ├── auth/              # Модуль аутентификации
│   ├── cooperative/       # Модуль кооператива
│   └── ...                # Остальные модули
└── extensions/            # Система подключаемых расширений
    ├── extensions.registry.ts
    └── base.extension.module.ts
migrations/                # Миграции данных (TypeORM)

Поток данных

  1. Резолвер принимает входные данные и передаёт в сервис
  2. Сервис вызывает интерактор домена, передавая DTO (реализующие доменный интерфейс)
  3. Интерактор выполняет бизнес-логику и взаимодействует с портами
  4. Адаптеры (инфраструктура) преобразуют доменные объекты в формат внешних систем
  5. Результаты возвращаются обратно по цепочке

Ключевые зависимости

  • @nestjs/* — фреймворк бэкенда
  • graphql / @nestjs/graphql — GraphQL API
  • mongoose — MongoDB ODM
  • typeorm — реляционный ORM с миграциями
  • eosjs — взаимодействие с блокчейном EOSIO
  • ioredis — Redis-клиент
  • @novu/api — сервис уведомлений
  • livekit-server-sdk — видеоконференции
  • winston — логирование

Лицензия

BY-NC-SA 4.0