Skip to content

Обзор архитектуры

Описание платформы

MLM-платформа с инвестиционным маркетплейсом, товарным маркетплейсом и административной панелью MLM.

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

  • Frontend: React + TypeScript
  • Backend: Node.js + TypeScript (NestJS)
  • База данных: PostgreSQL с расширением ltree
  • Кэш: Redis (опционально, для сессий/ограничения частоты запросов)
  • Очередь: pg-boss (нативная для PostgreSQL)

Структура проекта

Turborepo монорепозиторий с pnpm workspaces:

iwm-platform/
├── apps/
│   ├── api/                        # Backend API (NestJS)
│   │   ├── src/
│   │   │   ├── modules/           # Бизнес-модули
│   │   │   │   ├── auth/          # JWT, 2FA, сессии
│   │   │   │   ├── users/         # Управление пользователями
│   │   │   │   ├── kyc/           # Интеграция Sumsub KYC
│   │   │   │   ├── mlm/           # Ядро MLM
│   │   │   │   │   ├── partners/  # Партнёры, дерево
│   │   │   │   │   ├── ranks/     # Система 21 ранга
│   │   │   │   │   ├── commissions/ # 7 типов дохода
│   │   │   │   │   ├── payouts/   # Запросы на вывод
│   │   │   │   │   └── pools/     # Лидерские пулы
│   │   │   │   ├── investment/    # Инвестиционный маркетплейс
│   │   │   │   ├── commerce/      # Товарный маркетплейс
│   │   │   │   └── admin/         # Панель администратора
│   │   │   │
│   │   │   ├── core/              # Сквозные модули
│   │   │   │   ├── guards/        # Auth, role guards
│   │   │   │   ├── interceptors/  # Логирование, трансформация
│   │   │   │   ├── filters/       # Обработка исключений
│   │   │   │   └── decorators/    # Кастомные декораторы
│   │   │   │
│   │   │   ├── infrastructure/    # Внешние адаптеры
│   │   │   │   ├── database/      # Конфигурация Prisma
│   │   │   │   ├── cache/         # Redis
│   │   │   │   ├── queue/         # Воркеры pg-boss
│   │   │   │   └── external/      # Sumsub, платежи и т.д.
│   │   │   │
│   │   │   ├── main.ts            # Точка входа
│   │   │   └── app.module.ts      # Корневой модуль
│   │   │
│   │   ├── package.json
│   │   ├── tsconfig.json
│   │   └── nest-cli.json
│   │
│   └── web/                        # Frontend (React + Vite)
│       ├── src/
│       │   ├── config/
│       │   │   └── domains.ts     # Конфиг маршрутизации по доменам
│       │   ├── modules/           # Модули функций (lazy-loaded)
│       │   │   ├── auth/          # Вход, регистрация, 2FA
│       │   │   ├── investment/    # UI инвестиционного маркетплейса
│       │   │   ├── commerce/      # UI товарного маркетплейса
│       │   │   ├── partner/       # UI панели партнёра
│       │   │   └── admin/         # UI панели администратора
│       │   ├── App.tsx            # Маршрутизация с учётом домена
│       │   ├── main.tsx           # Точка входа с провайдерами
│       │   ├── i18n.ts            # Переводы RU/EN
│       │   └── index.css          # Базовые стили Tailwind
│       │
│       ├── package.json
│       ├── vite.config.ts
│       ├── tailwind.config.js
│       └── index.html

├── packages/                       # Общие пакеты
│   ├── shared-types/              # TypeScript интерфейсы (BE + FE)
│   ├── shared-utils/              # Общие утилитарные функции
│   └── ui-components/             # Общие React-компоненты

├── docs/                          # Документация VitePress
├── prisma/
│   └── schema.prisma              # Схема базы данных
├── docker/
│   ├── docker-compose.yml         # PostgreSQL + Redis
│   └── init-db.sql                # Инициализация БД

├── package.json                   # Корневой с Turborepo скриптами
├── pnpm-workspace.yaml            # Конфиг workspaces
├── turbo.json                     # Конфиг Turborepo
└── tsconfig.json                  # Базовая конфигурация TypeScript

Региональная архитектура платформы

Платформа работает как отдельные региональные развёртывания для соблюдения регуляторных требований:

Региональная изоляция:

  • Каждый регион — отдельное развёртывание со своей базой данных
  • Аккаунты пользователей региональные (один аккаунт на регион)
  • KYC статус региональный и доступен на всех платформах внутри региона
  • Доступ к другому региону требует отдельной регистрации

Процесс определения региона:

  1. Пользователь заходит на главный домен (iwm.com)
  2. Система определяет геолокацию по IP
  3. Модальное окно подтверждения региона с возможностью изменить
  4. Редирект на региональную платформу

Frontend с учётом домена

Единое React-приложение, развёрнутое на нескольких доменах:

ДоменМаршрут по умолчаниюМодули
invest.iwm.com/investinvestment, auth, profile
shop.iwm.com/shopcommerce, auth, profile
partner.iwm.com/dashboardpartner, auth, profile
app.iwm.com/Все модули (объединённый)

Региональный SSO (Single Sign-On)

В рамках каждого региона аутентификация общая для всех платформ:

  • Один аккаунт на регион — регистрация один раз, доступ к invest, shop и partner
  • Общая сессия — вход на любой платформе, авторизация сохраняется на всех платформах региона
  • KYC распространение — пройдите KYC на invest, статус доступен на shop и partner

Особенности платформ

ПлатформаKYC требуетсяПартнёрский функционал
InvestДа (для инвестиций)Виджет в профиле
ShopНетВиджет в профиле
PartnerНет (для доступа)Полная панель, автоактивация при входе

Связанные документы