130 lines
4.8 KiB
Markdown
130 lines
4.8 KiB
Markdown
# 📋 Резюме создания компонентов 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
|
||
```bash
|
||
cd components/notifications
|
||
pnpm install # или npm install
|
||
pnpm build # для компиляции TypeScript
|
||
```
|
||
|
||
### 2. Настройка notificator2
|
||
```bash
|
||
cd components/notificator2
|
||
pnpm install # или npm install
|
||
|
||
# Настройка окружения
|
||
cp .env.example .env
|
||
# Добавить NOVU_API_KEY в .env
|
||
|
||
# Запуск
|
||
pnpm start:dev
|
||
```
|
||
|
||
### 3. Добавление нового workflow
|
||
|
||
**В библиотеке notifications:**
|
||
```typescript
|
||
// 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:**
|
||
```typescript
|
||
// components/notifications/src/workflows/index.ts
|
||
import { orderWorkflow } from './order';
|
||
|
||
export const allWorkflows = [
|
||
welcomeWorkflow,
|
||
orderWorkflow, // ← добавить новый workflow
|
||
];
|
||
```
|
||
|
||
### 4. Использование API
|
||
|
||
**Триггер welcome workflow:**
|
||
```bash
|
||
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 архитектуру:
|
||
- ✅ `buildWorkflowData` → `WorkflowBuilder`
|
||
- ✅ `baseSteps` → `createEmailStep`, `createInAppStep`, etc.
|
||
- ✅ `upsertWorkflow` → `NovuService.upsertWorkflow`
|
||
- ✅ `triggerWorkflow` → `NovuService.triggerWorkflow`
|
||
- ✅ Типизация payload → Zod схемы + TypeScript типы
|