Прогресс разработки
Текущий статус: Неделя 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 синхронизация, эндпоинты портфолио)