Обзор архитектуры
Описание платформы
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 статус региональный и доступен на всех платформах внутри региона
- Доступ к другому региону требует отдельной регистрации
Процесс определения региона:
- Пользователь заходит на главный домен (iwm.com)
- Система определяет геолокацию по IP
- Модальное окно подтверждения региона с возможностью изменить
- Редирект на региональную платформу
Frontend с учётом домена
Единое React-приложение, развёрнутое на нескольких доменах:
| Домен | Маршрут по умолчанию | Модули |
|---|---|---|
invest.iwm.com | /invest | investment, auth, profile |
shop.iwm.com | /shop | commerce, auth, profile |
partner.iwm.com | /dashboard | partner, auth, profile |
app.iwm.com | / | Все модули (объединённый) |
Региональный SSO (Single Sign-On)
В рамках каждого региона аутентификация общая для всех платформ:
- Один аккаунт на регион — регистрация один раз, доступ к invest, shop и partner
- Общая сессия — вход на любой платформе, авторизация сохраняется на всех платформах региона
- KYC распространение — пройдите KYC на invest, статус доступен на shop и partner
Особенности платформ
| Платформа | KYC требуется | Партнёрский функционал |
|---|---|---|
| Invest | Да (для инвестиций) | Виджет в профиле |
| Shop | Нет | Виджет в профиле |
| Partner | Нет (для доступа) | Полная панель, автоактивация при входе |