Files
mono/SUMMARY.md
T
2025-07-03 18:03:31 +05:00

4.8 KiB
Raw Blame History

📋 Резюме создания компонентов Notifications

Что создано

1. 📚 Библиотека @monocoop/notifications

Расположение: components/notifications/

Функции:

  • Типизированные интерфейсы для workflow с Zod
  • Builder паттерн для создания workflow
  • Базовые шаблоны для email, in-app, push, SMS
  • Автоматическая конвертация Zod схем в JSON Schema для Novu
  • Экспорт всех workflow для использования в других пакетах

Структура:

src/
├── types/              # Базовые типы и интерфейсы
├── base/               # Утилиты и настройки по умолчанию
├── workflows/          # Папки с workflow
│   └── welcome/        # Пример приветственного workflow
└── index.ts           # Главный экспорт

2. 🚀 NestJS приложение @monocoop/notificator2

Расположение: components/notificator2/

Функции:

  • Автоматический upsert всех workflow в Novu при запуске
  • RESTful API для триггера уведомлений
  • Типизированная валидация payload
  • Health check endpoints
  • Использует библиотеку notifications для типов

API Endpoints:

  • GET /api/notifications/health - Health check
  • GET /api/notifications/workflows - Список workflow
  • POST /api/notifications/trigger - Универсальный триггер
  • POST /api/notifications/trigger/welcome - Триггер welcome workflow
  • POST /api/notifications/workflows/upsert-all - Принудительный upsert

🔧 Как использовать

1. Настройка библиотеки notifications

cd components/notifications
pnpm install  # или npm install
pnpm build    # для компиляции TypeScript

2. Настройка notificator2

cd components/notificator2
pnpm install  # или npm install

# Настройка окружения
cp .env.example .env
# Добавить NOVU_API_KEY в .env

# Запуск
pnpm start:dev

3. Добавление нового workflow

В библиотеке notifications:

// components/notifications/src/workflows/order/order-workflow.ts
export const orderWorkflow = WorkflowBuilder
  .create<OrderPayload>()
  .name('Order Confirmation')
  .workflowId('order-confirmation')
  .payloadSchema(orderPayloadSchema)
  .addSteps([...])
  .build();

Регистрация в index.ts:

// components/notifications/src/workflows/index.ts
import { orderWorkflow } from './order';

export const allWorkflows = [
  welcomeWorkflow,
  orderWorkflow,  // ← добавить новый workflow
];

4. Использование API

Триггер welcome workflow:

curl -X POST http://localhost:3000/api/notifications/trigger/welcome \
  -H "Content-Type: application/json" \
  -d '{
    "subscriberId": "user-123",
    "email": "user@example.com",
    "payload": {
      "userName": "Иван Иванов",
      "userEmail": "user@example.com",
      "age": 25
    }
  }'

🎯 Преимущества архитектуры

  1. Типобезопасность - Zod схемы обеспечивают валидацию на уровне TypeScript и runtime
  2. Разделение ответственности - Библиотека содержит только типы, сервер - логику
  3. Расширяемость - Легко добавлять новые workflow
  4. Автоматизация - Workflow автоматически синхронизируются с Novu
  5. Переиспользование - Типы можно использовать в других частях системы

🔄 Workflow при запуске

  1. Запуск notificator2
  2. Чтение всех workflow из библиотеки
  3. Проверка существования в Novu
  4. Создание/обновление workflow
  5. Готов к приёму запросов на триггеры

📁 Структура как в testFramework2.ts

Вся логика из testFramework2.ts была перенесена в structured архитектуру:

  • buildWorkflowDataWorkflowBuilder
  • baseStepscreateEmailStep, createInAppStep, etc.
  • upsertWorkflowNovuService.upsertWorkflow
  • triggerWorkflowNovuService.triggerWorkflow
  • Типизация payload → Zod схемы + TypeScript типы