Этапы реализации
Этап 1: Основа
Цель: Базовая инфраструктура, аутентификация, управление пользователями
- [ ] Настройка проекта (монорепозиторий, конфигурации)
- [ ] Настройка базы данных со схемами
- [ ] Аутентификация (JWT, refresh токены)
- [ ] Регистрация/вход пользователей
- [ ] Базовый RBAC
Этап 2: Ядро MLM
Цель: Система партнёров, отслеживание рефералов, управление деревом
- [ ] Сущность партнёра с closure table
- [ ] Генерация реферальных ссылок
- [ ] Отслеживание атрибуции (cookies)
- [ ] Процесс регистрации партнёра
- [ ] Данные для визуализации дерева
Этап 3: Движок комиссий
Цель: Расчёт комиссий, балансы, базовые выплаты
- [ ] Конфигурация комиссионного плана
- [ ] Калькулятор Unilevel-комиссий
- [ ] Распределение двойного вознаграждения
- [ ] Управление балансами
- [ ] Процесс запроса выплаты
Этап 4: Модуль инвестиций
Цель: Инвестиционные стратегии, визард участия
- [ ] Каталог стратегий
- [ ] Многошаговое участие
- [ ] Инвестиционный портфель
- [ ] Триггеры комиссий
Этап 5: Модуль электронной коммерции
Цель: Каталог товаров, корзина, оформление заказа, заказы
- [ ] Каталог товаров
- [ ] Управление корзиной
- [ ] Процесс оформления заказа
- [ ] Интеграция платежей
- [ ] Управление заказами
- [ ] Триггеры комиссий
Этап 6: Система рангов
Цель: Ранги, прогрессия, требования
- [ ] Определения рангов
- [ ] Правила квалификации
- [ ] Отслеживание прогресса
- [ ] Бонусы за ранг
Этап 7: Администрирование и финализация
Цель: Панель администратора, KYC, уведомления
- [ ] Панель суперадминистратора
- [ ] Процесс KYC
- [ ] Email-уведомления
- [ ] Дашборд аналитики
Этап 8: Тестирование и запуск
Цель: Тестирование, оптимизация, развёртывание
- [ ] Интеграционное тестирование
- [ ] Нагрузочное тестирование
- [ ] Аудит безопасности
- [ ] Развёртывание в продакшн
Мониторинг
Проверки работоспособности
typescript
// NestJS Terminus для проверок работоспособности
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private db: PrismaHealthIndicator,
) {}
@Get()
check() {
return this.health.check([
() => this.db.pingCheck('database'),
]);
}
@Get('ready')
ready() {
return this.health.check([
() => this.db.pingCheck('database'),
// Добавить проверку pg-boss
]);
}
}Ключевые метрики для отслеживания
| Метрика | Источник | Порог оповещения |
|---|---|---|
| Время ответа API (p95) | Логи приложения | > 2с |
| Количество неудачных заданий | Архив pg-boss | > 10/час |
| Задержка обработки комиссий | Возраст заданий в очереди | > 5 мин |
| Подключения к БД | PostgreSQL | > 80% пула |
| Уровень ошибок (5xx) | HTTP-логи | > 1% |
Простая стратегия логирования
typescript
// Структурированное JSON-логирование с Pino
{
"level": "info",
"time": "2024-01-15T10:30:00Z",
"requestId": "abc-123",
"userId": "user-456",
"action": "commission.calculated",
"data": { "amount": 150.00, "partnerId": "partner-789" }
}Стек мониторинга для продакшна
- Метрики: Prometheus + Grafana (self-hosted) или Datadog
- Логи: Структурированный JSON в CloudWatch Logs или Loki
- Оповещения: Grafana Alerting или PagerDuty для критических порогов
- Трассировка: Correlation ID во всех запросах для отладки многослойных операций