🎯 Основные изменения: Backend: - ✅ Добавлен SSE endpoint для real-time событий (/api/v1/events/{task_id}) - ✅ Redis Pub/Sub для публикации/подписки на события OCR/Vision - ✅ Удален aioboto3 из requirements.txt (конфликт зависимостей) - ✅ Добавлен OCR worker (deprecated, логика перенесена в n8n) Frontend (React): - ✅ Автогенерация claim_id и session_id - ✅ Клиентская конвертация файлов в PDF (JPG/PNG/HEIC/WEBP) - ✅ Сжатие изображений до 2MB перед конвертацией - ✅ SSE подписка на события OCR/Vision в Step1Policy - ✅ Валидация документов (полис vs неподходящий контент) - ✅ Real-time прогресс загрузки и обработки файлов - ✅ Интеграция с n8n webhooks для проверки полиса и загрузки файлов n8n Workflows: - ✅ Проверка полиса в MySQL + запись в PostgreSQL - ✅ Загрузка файлов в S3 + OCR + Vision AI - ✅ Публикация событий в Redis через backend API - ✅ Валидация документов (распознавание полисов ERV) Документация: - 📝 N8N_INTEGRATION.md - интеграция с n8n - 📝 N8N_SQL_QUERIES.md - SQL запросы для workflows - 📝 N8N_PDF_COMPRESS.md - сжатие PDF - 📝 N8N_STIRLING_COMPRESS.md - интеграция Stirling-PDF Утилиты: - 🔧 monitor_redis.py/sh - мониторинг Redis Pub/Sub - 🔧 test_redis_events.sh - тестирование событий - 🔧 pdfConverter.ts - клиентская конвертация в PDF Архитектура: React → n8n webhooks (sync) → MySQL/PostgreSQL/S3 → n8n workflows (async) → OCR/Vision → Redis Pub/Sub → SSE → React
87 lines
1.8 KiB
Bash
Executable File
87 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# Тест Redis Pub/Sub через HTTP эндпоинты
|
||
|
||
TASK_ID="test-$(date +%s)"
|
||
BASE_URL="http://localhost:8100/api/v1"
|
||
|
||
echo "🧪 Testing Redis Pub/Sub Events"
|
||
echo "================================"
|
||
echo "Task ID: $TASK_ID"
|
||
echo ""
|
||
|
||
# В фоне запускаем SSE подписку
|
||
echo "📡 Starting SSE listener..."
|
||
curl -N "$BASE_URL/events/$TASK_ID" &
|
||
SSE_PID=$!
|
||
sleep 2
|
||
|
||
# Публикуем события
|
||
echo ""
|
||
echo "📢 Publishing events..."
|
||
echo ""
|
||
|
||
echo "1️⃣ Processing started..."
|
||
curl -X POST "$BASE_URL/events/$TASK_ID" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"status": "processing",
|
||
"message": "Начата обработка файла",
|
||
"data": {"filename": "test.pdf"}
|
||
}' | jq '.'
|
||
|
||
sleep 2
|
||
|
||
echo ""
|
||
echo "2️⃣ OCR started..."
|
||
curl -X POST "$BASE_URL/events/$TASK_ID" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"status": "ocr_started",
|
||
"message": "Запущено распознавание текста",
|
||
"data": {}
|
||
}' | jq '.'
|
||
|
||
sleep 3
|
||
|
||
echo ""
|
||
echo "3️⃣ OCR completed..."
|
||
curl -X POST "$BASE_URL/events/$TASK_ID" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"status": "ocr_completed",
|
||
"message": "Распознано 1500 символов",
|
||
"data": {"chars": 1500}
|
||
}' | jq '.'
|
||
|
||
sleep 2
|
||
|
||
echo ""
|
||
echo "4️⃣ Completed..."
|
||
curl -X POST "$BASE_URL/events/$TASK_ID" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"status": "completed",
|
||
"message": "Обработка завершена",
|
||
"data": {
|
||
"document_type": "policy",
|
||
"is_valid": true,
|
||
"confidence": 0.95
|
||
}
|
||
}' | jq '.'
|
||
|
||
sleep 2
|
||
|
||
# Убиваем SSE слушатель
|
||
echo ""
|
||
echo "🛑 Stopping SSE listener..."
|
||
kill $SSE_PID 2>/dev/null
|
||
|
||
echo ""
|
||
echo "✅ Test completed!"
|
||
|
||
|
||
|
||
|
||
|
||
|