4.8 KiB
4.8 KiB
📋 Резюме создания компонентов 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 checkGET /api/notifications/workflows- Список workflowPOST /api/notifications/trigger- Универсальный триггерPOST /api/notifications/trigger/welcome- Триггер welcome workflowPOST /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
}
}'
🎯 Преимущества архитектуры
- Типобезопасность - Zod схемы обеспечивают валидацию на уровне TypeScript и runtime
- Разделение ответственности - Библиотека содержит только типы, сервер - логику
- Расширяемость - Легко добавлять новые workflow
- Автоматизация - Workflow автоматически синхронизируются с Novu
- Переиспользование - Типы можно использовать в других частях системы
🔄 Workflow при запуске
- Запуск notificator2 →
- Чтение всех workflow из библиотеки →
- Проверка существования в Novu →
- Создание/обновление workflow →
- Готов к приёму запросов на триггеры
📁 Структура как в testFramework2.ts
Вся логика из testFramework2.ts была перенесена в structured архитектуру:
- ✅
buildWorkflowData→WorkflowBuilder - ✅
baseSteps→createEmailStep,createInAppStep, etc. - ✅
upsertWorkflow→NovuService.upsertWorkflow - ✅
triggerWorkflow→NovuService.triggerWorkflow - ✅ Типизация payload → Zod схемы + TypeScript типы