Skip to content

Прогресс разработки

Текущий статус: Неделя 8 - Инвестиционный бэкенд | Цель: 12-недельная реализация

Отслеживайте наш прогресс в создании IWM Платформы - MLM платформы с инвестиционным маркетплейсом, товарным маркетплейсом и административной панелью.


Чеклист этапов

Неделя 1: Архитектура и настройка проекта

  • ✅ Инициализация Turborepo монорепо с pnpm workspaces
  • ✅ Настройка TypeScript, ESLint, Prettier
  • ✅ Настройка Docker Compose (PostgreSQL, Redis)
  • ✅ Настройка CI пайплайна GitHub Actions
  • ✅ Полная Prisma схема со всеми 25+ таблицами
  • ✅ Создание начальной миграции базы данных
  • ✅ Сид-данные рангов (20 рангов) и лидерских пулов (7 пулов)
  • ✅ Создание структуры всех NestJS модулей
  • ✅ Создание единого React приложения с доменной маршрутизацией
  • ✅ Настройка Tailwind CSS и React Router
  • ✅ Настройка общих пакетов (shared-types, shared-utils, ui-components)

Неделя 2-3: Базовая инфраструктура

  • ✅ JWT аутентификация с refresh токенами
  • ✅ Хеширование паролей и управление сессиями
  • ✅ Потоки верификации email и сброса пароля
  • ✅ Реализация TOTP 2FA
  • ✅ CRUD профиля пользователя и загрузка аватара
  • ✅ Интеграция Sumsub KYC SDK
  • ✅ Обработчик вебхуков KYC и отслеживание статуса
  • ✅ Фронтенд авторизации (вход, регистрация, восстановление пароля) - с i18n и тематизацией
  • ✅ OAuth аутентификация (Google, Yandex, Mail.ru) - опциональные провайдеры с graceful fallback
  • ✅ UI профиля и мастер KYC
  • ✅ Инфраструктура атрибуции рефералов (куки, отслеживание, бэкенд сервис)
  • ✅ Сервис геоопределения (определение региона по IP: EU/US/APAC)
  • ✅ UI модального окна подтверждения региона
  • ✅ Маршрутизация по региональным субдоменам (eu.iwm.com, us.iwm.com, apac.iwm.com)
  • ✅ Кросс-доменное разделение сессий (JWT куки на региональном домене)
  • ✅ SSO редирект между платформами (редиректор региона, модальное окно несоответствия)
  • ✅ Архитектура KYC Хаба (интеграция внешних провайдеров, маппинг уровней)
  • ✅ Распространение статуса KYC между платформами региона (общая БД, хук useKycStatus)

Неделя 4-5: Ядро MLM

  • ✅ Сущность партнёра со связью спонсора
  • ✅ Реализация closure table для структуры дерева
  • ✅ Эффективные запросы обхода дерева
  • ✅ Система 21 ранга с требованиями и ставками
  • ✅ Логика автоматического повышения ранга
  • ⬜ Мгновенная активация партнёра при входе на партнёрский домен
  • ⬜ Виджет партнёра в профиле пользователя (мини-статистика, реферальная ссылка)
  • ⬜ Маршрутизация партнёрского домена (partner.region.iwm.com)
  • ✅ Триггеры событий активации партнёра для комиссий
  • ✅ CRUD реферальных ссылок с поддержкой UTM
  • ✅ Генерация QR-кодов для ссылок
  • ✅ UI дашборда партнёра (статистика, графики) - 8 страниц, 10 компонентов
  • ✅ Интерактивная визуализация дерева команды
  • ✅ UI управления реферальными ссылками
  • ✅ Фронтенд хуки (usePartner, useRank, useReferralLinks, useTeamTree)
  • ✅ API клиент MLM с типизированными эндпоинтами

Неделя 6: Движок комиссий - Активный доход

  • ✅ Сущность комиссионной транзакции и запись
  • ✅ ТИП_1: Калькулятор личных продаж
  • ✅ ТИП_2: Дифференциальный калькулятор командных продаж
  • ✅ ТИП_3: Калькулятор повторных продаж
  • ✅ Распределение комиссии за входной взнос
  • ✅ Управление балансом (зачисление/списание/ожидание)
  • ✅ Очередь комиссий с pg-boss
  • ✅ Паттерн идемпотентности для распределения комиссий
  • ✅ Запросы истории и разбивки комиссий
  • ✅ 30-дневный период ожидания с заданием на созревание

Неделя 7: Пассивный доход + Пулы + Фаза дизайна 1

  • ⬜ ТИП_4: Калькулятор доходности портфеля (не комиссия — собственный доход партнёра)
  • ✅ ТИП_5: Калькулятор прибыли клиентов
  • ✅ ТИП_6: Дифференциальный калькулятор сетевой прибыли
  • ✅ Конфигурация лидерских пулов (7 пулов с порогами квалификации)
  • ✅ Реализация правила 50% ветки
  • ✅ Задачи еженедельного/ежемесячного распределения пулов (pg-boss cron)
  • ✅ Рабочий процесс запроса и одобрения выплат
  • ⬜ Извлечение дизайн-токенов из Figma
  • ⬜ Стилизация всех примитивных компонентов
  • ⬜ Создание основы дизайн-системы

Неделя 8: Бэкенд инвестиций + Фаза дизайна 2

  • ✅ Сущность инвестиционных стратегий и CRUD (StrategyService, StrategyController, StrategyRepository)
  • ✅ Архитектура агрегатора внешних провайдеров (все стратегии внешние, webhook-first pipeline)
  • ✅ Создание инвестиции через вебхуки провайдера (WebhookProcessorService, InvestmentService)
  • ✅ Аудит-лог событий вебхуков (WebhookEventLog модель, HMAC-верификация подписи)
  • ✅ Триггеры комиссий на события инвестиций (InvestmentCreatedEvent, InvestmentProfitDistributedEvent)
  • ✅ Генерация SSO токенов для внешних провайдеров (ProviderSsoService, JWT с 5мин TTL)
  • ✅ Сервис редиректа к провайдерам (авто-вход через подписанный JWT)
  • ✅ Двунаправленная синхронизация KYC — вебхуки (Провайдер → IWM через kyc.synced)
  • ✅ Фоновые задачи синхронизации KYC (IWM → Провайдер через pg-boss каждые 6 часов)
  • ✅ Отслеживание статуса внешних провайдеров (ExternalProvider с apiBaseUrl, ssoAudience)
  • ✅ Портфолио и история инвестиций (InvestmentController)
  • ✅ Идемпотентная обработка вебхуков (уникальность externalEventId на провайдера)
  • ⬜ Применение дизайна ко всем страницам авторизации
  • ⬜ Применение дизайна к страницам профиля/KYC
  • ⬜ Применение дизайна к MLM дашборду
  • ⬜ Применение дизайна к страницам комиссий/выплат

Неделя 9: Фронтенд инвестиций

  • ⬜ Финализация задач распределения прибыли
  • ⬜ UI потока редиректа к внешнему провайдеру
  • ⬜ Статус подключения провайдера в портфеле
  • ✅ Каталог стратегий с фильтрами
  • ✅ Страница деталей стратегии с индикаторами риска + баннер внешнего провайдера
  • ✅ 6-шаговый мастер участия (UI)
  • ✅ Обзор портфеля с графиками прибыли
  • ✅ Детали инвестиции и история транзакций
  • ✅ Функционал запроса вывода средств

Неделя 10: Товарный маркетплейс

  • ⬜ Категории товаров (иерархические)
  • ⬜ Сущность товара с изображениями и атрибутами
  • ⬜ Полнотекстовый поиск товаров
  • ⬜ Операции корзины (добавить, обновить, удалить)
  • ⬜ Сессия оформления заказа и создание заказа
  • ⬜ Поток статусов заказа и отслеживание
  • ⬜ Триггеры комиссий коммерции
  • ✅ Фронтенд каталога товаров - 12 страниц, 9 компонентов
  • ✅ UI корзины и оформления заказа - 4-шаговый мастер
  • ✅ История заказов и отслеживание

Неделя 11: Админ-панель и интеграции

  • ⬜ Ролевой контроль доступа админа
  • ⬜ Управление пользователями и партнёрами
  • ⬜ Интерфейс рабочего процесса проверки KYC
  • ⬜ Управление комиссиями и корректировки
  • ⬜ Рабочий процесс одобрения выплат
  • ⬜ Абстрактный слой платёжного провайдера
  • ⬜ Система уведомлений (email, в приложении)
  • ⬜ Отслеживание событий аналитики
  • ✅ Админ-дашборд с отчётами - 8 страниц, 9 компонентов
  • ⬜ Управление системными настройками

Неделя 12: Тестирование и запуск

  • ⬜ Юнит-тесты движка комиссий
  • ⬜ Юнит-тесты системы рангов
  • ⬜ Интеграционные тесты потоков авторизации
  • ⬜ Интеграционные тесты мастера инвестиций
  • ⬜ Интеграционные тесты оформления заказа
  • ⬜ E2E набор тестов критических путей
  • ⬜ Аудит безопасности (OWASP Top 10)
  • ⬜ Тестирование производительности (API < 200мс p95)
  • ✅ Развёртывание в продакшн (Caddy reverse proxy + PM2)
  • ⬜ Настройка мониторинга и алертинга

История изменений

Обновления разработки будут записываться здесь по мере продвижения работы.

2026-02-13 (Неделя 8 - Инвестиционный бэкенд)

  • Выполнено: Архитектура агрегатора внешних провайдеров
    • Все инвестиционные стратегии внешние (управляются сторонними провайдерами)
    • Webhook-first пайплайн: сырые события в WebhookEventLog, затем обработка
    • HMAC-SHA256 верификация подписи всех входящих вебхуков (WebhookHmacGuard)
    • Идемпотентная обработка через @@unique([providerId, externalEventId])
  • Выполнено: Модуль инвестиций (39 файлов, чистая архитектура)
    • Domain: 4 сущности, 4 интерфейса репозиториев, 3 события, 4 исключения
    • Infrastructure: 4 Prisma-реализации репозиториев, 1 HMAC guard
    • Application: 5 сервисов, 4 DTO файла, 1 pg-boss задача
    • Presentation: 3 контроллера (Strategy, Investment, Webhook)
  • Выполнено: SSO внешних провайдеров
    • Генерация JWT токенов с ключами подписи per-provider (env vars)
    • Payload: userId, email, fullName, kycStatus, kycLevel, strategyCode
    • 5-минутный TTL, настраиваемый audience per provider
  • Выполнено: Пайплайн обработки вебхуков
    • 5 типов событий: investment.created, profit.distributed, investment.updated, investment.withdrawn, kyc.synced
    • investment.created → Investment + DEPOSIT транзакция → InvestmentCreatedEvent (комиссии)
    • profit.distributed → PROFIT транзакция → InvestmentProfitDistributedEvent (Тип 5/6)
  • Выполнено: Синхронизация KYC (IWM → Провайдер)
    • pg-boss задача каждые 6 часов
    • HMAC-подписанные POST запросы к API провайдеров
  • Выполнено: Эндпоинты портфолио и стратегий (8 эндпоинтов)
  • Схема: WebhookEventLog модель, расширения ExternalProvider и Investment

2026-02-12 (Неделя 7 - Пассивный доход и выплаты)

  • Выполнено: Пассивный доход — типы комиссий
    • ТИП_3 (Повторные продажи): Определение существующих покупок, ставки как у ТИП_1 с типом дохода REPEAT_SALES
    • ТИП_5 (Прибыль клиентов): Спонсор получает passiveIncomeRate от инвестиционной прибыли реферала
    • ТИП_6 (Дифференциал сетевой прибыли): Обход upline с дифференциалом passiveIncomeRate (логика пропуска при нуле)
    • Обработчик InvestmentProfitDistributedEvent для триггеров пассивных комиссий
  • Выполнено: Распределение лидерских пулов (ТИП_7)
    • Репозиторий распределения пулов с raw SQL для расчёта оборота и объёмов веток
    • Правило 50% ветки: Одна ветка не может вносить >50% квалификационного объёма
    • Еженедельные (Пн 00:00 UTC) и ежемесячные (1-е число 00:00 UTC) pg-boss задачи
    • Квалификация по порогу PRO vs базовый ранг
    • Равное разделение между квалифицированными партнёрами, моментальное зачисление на баланс (без 30-дневного ожидания)
    • Идемпотентное распределение с предотвращением дублей по периоду
  • Выполнено: Модуль выплат
    • Домен: PayoutRequestEntity со стейт-машиной (canCancel, canApprove, canReject, canProcess, canComplete, canAdminCancel)
    • Домен: PayoutMethodEntity, PayoutValidationException
    • Репозитории: IPayoutRequestRepository, IPayoutMethodRepository с Prisma реализациями
    • PayoutService: Создание/отмена запросов, админ одобрение/отклонение/обработка/завершение/отмена с дебетом/возвратом баланса
    • PayoutController: 13 эндпоинтов (CRUD методов, жизненный цикл запросов, админ workflow)
    • PayoutModule зарегистрирован в AppModule с интеграцией MlmModule и CommissionModule
  • Схема: Добавлены пороги квалификационного объёма в LeadershipPool (qualificationVolumeUsd, qualificationVolumeProUsd)

2026-02-11 (Неделя 6 - Движок комиссий)

  • Выполнено: Движок комиссий - Активный доход (Типы 1-2)
    • Схема: Добавлен idempotencyKey в CommissionTransaction для предотвращения дублей
    • Схема: Добавлен составной индекс [status, createdAt] для оптимизации запросов созревания
    • Модуль Jobs: интеграция pg-boss@9.0.3 с типизированным сервисом задач и cron планированием
    • Домен Commission: CommissionEntity, события (CommissionCalculated, CommissionMatured)
    • Интерфейсы репозиториев: ICommissionRepository, IBalanceRepository с атомарными операциями
    • Реализации репозиториев: Паттерн upsert, атомарные обновления баланса, groupBy запросы
    • Balance Service: Зачисление pending, созревание комиссий, вывод с валидацией
    • Commission Calculator: TYPE_1 (Личные продажи), TYPE_2 (Дифференциал команды)
    • Event Handlers: InvestmentCreatedHandler, OrderPaidHandler с декораторами @OnEvent
    • Maturation Job: Ежедневная pg-boss задача для 30-дневного периода с пакетной обработкой
    • Commission Controller: Эндпоинты истории, сводки, баланса с полной Swagger документацией
    • Commission Module: Полная связка с интеграцией MlmModule
    • Зависимости: pg-boss@9.0.3, date-fns@4.1.0
  • Качество кода: Применены комплексные исправления
    • Race conditions: Замена check-then-create на атомарные upsert операции
    • Идемпотентность: Обработка ошибок unique constraint вместо TOCTOU паттерна
    • Границы транзакций: Обёртка balance+status обновлений в $transaction
    • Защита от отрицательного баланса: Атомарный updateMany с валидацией баланса
    • Точность событий: Изменение amount с number на string для безопасности Decimal
    • Оптимизация запросов: Параллелизация summary запросов через Promise.all
    • Очистка воркеров: Правильный OnModuleDestroy с offWork() отпиской
    • Обработка ошибок: Контекстные ошибки запуска pg-boss, try-catch в handlers
    • Валидация DTO: Удалены defaults, добавлен @Max(100) limit, Swagger декораторы
    • Инкапсуляция модуля: Удалён raw PG_BOSS export, только PgBossService экспортируется
  • Примечание: TYPE_3 (Повторные продажи) отложен на Неделю 7 по плану

2026-02-11 (Неделя 4-5 - Ядро MLM)

  • Выполнено: Бэкенд инфраструктура MLM Core
    • Доменные сущности: PartnerEntity, RankEntity, ReferralLinkEntity
    • Доменные события: PartnerActivatedEvent, PartnerRankChangedEvent
    • Интерфейсы и реализации репозиториев для Partner, Rank, ReferralLink
    • PartnerTreeRepository с closure table для эффективного обхода дерева
    • PartnerService: создание, активация, статистика сети, запросы upline/downline
    • ReferralLinkService: CRUD, генерация QR-кодов с библиотекой qrcode
    • RankService: логика повышения ранга, расчёт прогресса, проверка требований
    • DTO: Partner, ReferralLink, Rank с полной Swagger документацией
    • Контроллеры: PartnerController, ReferralLinkController, RankController
    • MlmModule обновлён со всеми новыми провайдерами и экспортами
  • Выполнено: Фронтенд интеграция MLM
    • mlmApi.ts: типизированный API клиент для эндпоинтов Partner, ReferralLinks, Ranks
    • Хук usePartner: профиль партнёра, статистика, создание/активация
    • Хук useReferralLinks: CRUD операции, получение QR-кодов
    • Хук useRank: данные рангов, прогресс, проверка повышения
    • Хук useTeamTree: дерево downline, цепочка upline, прямая команда
  • Добавлено: зависимости qrcode и @types/qrcode
  • Неделя 4-5 Ядро MLM: Бэкенд ЗАВЕРШЁН (осталось: маршрутизация партнёрского домена, виджет профиля)

2026-02-10

  • Выполнено: Маршрутизация по региональным субдоменам
    • Бэкенд: утилита извлечения региона из hostname
    • Бэкенд: CookieAuthService для управления региональными JWT куками
    • Бэкенд: JWT стратегия обновлена для чтения из куков с фоллбеком на заголовок
    • Бэкенд: Auth контроллер устанавливает куки при входе/регистрации/обновлении
    • Фронтенд: сервис regionRedirector для маршрутизации platform-first
    • Фронтенд: хук useRegionRedirect для автоматического определения и редиректа
  • Выполнено: Кросс-доменное разделение сессий
    • JWT куки на региональном домене (.eu.iwm.com) для SSO внутри региона
    • Кука домашнего региона на корневом домене для кросс-региональной детекции
    • Поддержка куков: HttpOnly, Secure, SameSite=Lax
  • Выполнено: SSO редирект
    • Фронтенд: RegionMismatchModal для уведомления о кросс-региональном доступе
    • Фронтенд: хук useRegionMismatch для определения домашнего vs текущего региона
    • i18n: переводы несоответствия регионов (EN/RU)
  • Выполнено: Распространение статуса KYC
    • Фронтенд: хук useKycStatus для получения и кеширования статуса KYC
    • Фронтенд: конфиг KYC_REQUIREMENTS для платформо-специфичных уровней KYC
    • Общая БД обеспечивает мгновенную согласованность статуса KYC между платформами
  • Неделя 2-3 Базовая инфраструктура: ЗАВЕРШЕНА

2026-02-08

  • Выполнено: Инфраструктура атрибуции рефералов
    • Фронтенд: куки атрибуции, утилиты, сервис атрибуции
    • Фронтенд: хуки useReferralAttribution и useRegistrationAttribution
    • Бэкенд: DTO атрибуции, сервис, контроллер в модуле MLM
    • Интеграция: RegisterPage захватывает данные атрибуции при регистрации
  • Выполнено: Геоопределение и основа регионального SSO
    • Фронтенд: сервис геоопределения с маппингом страна-регион
    • Фронтенд: хук useGeoDetection с состоянием подтверждения
    • Фронтенд: компонент RegionConfirmModal
    • i18n: переводы для geo (EN/RU)
  • Выполнено: Архитектура KYC Хаба
    • Доменные события: KycStatusChangedEvent
    • Исключения: KycRequiredException, KycUpgradeRequiredException
    • Гарды: KycGuard с декоратором @RequireKyc
    • Интеграция внешних провайдеров: DTO, сервис маппинга уровней, контроллер
    • KYC сервис: эмиссия событий, метод updateFromExternalProvider
  • Расширено: Неделя 2-3 (Базовая инфраструктура)
    • Геоопределение и подтверждение региона
    • Маршрутизация по региональным субдоменам (EU/US/APAC)
    • Кросс-доменный SSO внутри региона
    • Архитектура KYC Хаба (Invest как центр верификации)
  • Расширено: Неделя 4-5 (Ядро MLM)
    • Мгновенная активация партнёра при входе на партнёрский домен
    • Виджет партнёра в профиле пользователя
    • Маршрутизация партнёрского домена
  • Расширено: Неделя 8-9 (Инвестиции)
    • Глубокая SSO интеграция с внешними провайдерами
    • Двунаправленная синхронизация KYC (IWM ↔ Провайдер)
    • Поток редиректа к провайдеру с авто-входом

2026-02-02

  • Выполнено: i18n фундамент с react-i18next (EN/RU переводы, определение языка)
  • Выполнено: Система тем платформы с доменной тематизацией
  • Выполнено: Лендинг с карточками платформ (shop, invest, partner, admin)
  • Выполнено: Платформо-специфичные макеты авторизации с тематизацией
  • Выполнено: Интеграция внешнего провайдера в модуле инвестиций
  • Выполнено: Основа сервисного слоя API (apiClient, authApi)
  • Выполнено: OAuth аутентификация (Google, Yandex, Mail.ru)
    • NestJS Passport стратегии с паттерном опционального провайдера
    • OAuth-enabled гарды (503 ответ при отсутствии конфигурации провайдера)
    • Фронтенд компонент SocialLoginButtons с i18n
    • OAuthCallbackPage для обработки токенов
    • Prisma схема: AuthProvider enum, поле oauthId, уникальный constraint
  • Выполнено: Развёртывание в продакшн на *.iwm-platform.octosparrow.space
    • Конфигурация Caddy reverse proxy
    • Управление процессами PM2
    • OAuth callback URLs настроены для продакшна
  • Файлы: i18n/, config/platformTheme.ts, modules/landing/, layouts/auth/, services/api/, modules/auth/infrastructure/strategies/, modules/auth/presentation/guards/, modules/auth/components/SocialLoginButtons.tsx

2026-01-31

  • Выполнено: Полная Prisma схема с 25+ моделями в 4 схемах (core, mlm, investment, commerce)
  • Выполнено: Сидирование базы данных для 20 рангов и 7 лидерских пулов
  • Выполнено: Обновление документации для отслеживания рефералов на уровне User и региональных полей
  • Выполнено: JWT аутентификация с refresh токенами и управление сессиями
  • Выполнено: Верификация email и сброс пароля с интеграцией SendGrid
  • Выполнено: Реализация TOTP 2FA (генерация секрета, включение, отключение)
  • Выполнено: CRUD профиля пользователя и загрузка аватара с валидацией
  • Файлы: prisma/schema.prisma, prisma/seed.ts, модуль auth, модуль email, модуль users, сервис two-factor

Последнее обновление: 2026-02-13 (Неделя 8 Инвестиционный бэкенд: Агрегатор внешних провайдеров, JWT SSO, HMAC вебхуки, KYC синхронизация, эндпоинты портфолио)