feat: Add claim plan confirmation flow via Redis SSE
Problem:
- After wizard form submission, need to wait for claim data from n8n
- Claim data comes via Redis channel claim:plan:{session_token}
- Need to display confirmation form with claim data
Solution:
1. Backend: Added SSE endpoint /api/v1/claim-plan/{session_token}
- Subscribes to Redis channel claim:plan:{session_token}
- Streams claim data from n8n to frontend
- Handles timeouts and errors gracefully
2. Frontend: Added subscription to claim:plan channel
- StepWizardPlan: After form submission, subscribes to SSE
- Waits for claim_plan_ready event
- Shows loading message while waiting
- On success: saves claimPlanData and shows confirmation step
3. New component: StepClaimConfirmation
- Displays claim confirmation form in iframe
- Receives claimPlanData from parent
- Generates HTML form (placeholder - should call n8n for real HTML)
- Handles confirmation/cancellation via postMessage
4. ClaimForm: Added conditional step for confirmation
- Shows StepClaimConfirmation when showClaimConfirmation=true
- Step appears after StepWizardPlan
- Only visible when claimPlanData is available
Flow:
1. User fills wizard form → submits
2. Form data sent to n8n via /api/v1/claims/wizard
3. Frontend subscribes to SSE /api/v1/claim-plan/{session_token}
4. n8n processes data → publishes to Redis claim:plan:{session_token}
5. Backend receives → streams to frontend via SSE
6. Frontend receives → shows StepClaimConfirmation
7. User confirms → proceeds to next step
Files:
- backend/app/api/events.py: Added stream_claim_plan endpoint
- frontend/src/components/form/StepWizardPlan.tsx: Added subscribeToClaimPlan
- frontend/src/components/form/StepClaimConfirmation.tsx: New component
- frontend/src/pages/ClaimForm.tsx: Added confirmation step to steps array
This commit is contained in:
60
docs/SESSION_LOG_2025-11-22.md
Normal file
60
docs/SESSION_LOG_2025-11-22.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Лог сессии работы с ticket_form - 22 ноября 2025
|
||||
|
||||
## Основные изменения
|
||||
|
||||
### 1. Исправлена загрузка черновиков
|
||||
- Добавлено расширенное логирование в `checkDrafts` (ClaimForm.tsx)
|
||||
- Упрощена логика перехода к шагу выбора черновика (заменён двойной `requestAnimationFrame` на `setTimeout(100)`)
|
||||
- Убрано отображение `claim_id` в заголовке черновика (теперь просто "Черновик")
|
||||
|
||||
### 2. Обновлен формат пути файлов в S3
|
||||
- Изменён формат с `{project_id}_Клиентправ` на `{project_name}_{project_id}`
|
||||
- `project_name` берётся из Redis (например, "ERV_6381_КлиентПрав")
|
||||
- Итоговый путь: `/f9825c87-.../crm2/CRM_Active_Files/Documents/Project/ERV_6381_КлиентПрав_398957/{doc_id}__{slug}.{ext}`
|
||||
- Файл: `ticket_form/docs/CODE_FILES_RENAME_FIXED.js`
|
||||
|
||||
### 3. Добавлено использование названия поля из формы визарда
|
||||
- В `StepWizardPlan.tsx` добавлена отправка `uploads_field_labels[i]` (содержит `block.docLabel`)
|
||||
- В `CODE_FILES_RENAME_FIXED.js` добавлен `field_label` в результат (`renames` и `documents_meta`)
|
||||
- Приоритет для slug: `field_label` > `field_name` > `description` > `group_index`
|
||||
- Теперь вместо `upload-contr` будет использоваться название поля (например, "Оглавление" → `oglavlenie`)
|
||||
|
||||
### 4. Обновлена операция CreateClientProject
|
||||
- Теперь возвращает не только `project_id`, но и `project_name`
|
||||
- `project_name` сохраняется в Redis сессии
|
||||
- Файл: `include/Webservices/CreateClientProject.php`
|
||||
|
||||
### 5. Исправлена нода Edit Fields13 в n8n
|
||||
- Добавлен `.first()` для обращения к нодам, возвращающим один item
|
||||
- Исправлено обращение к Split Out2 (используется `$json.to` вместо `$('Split Out2').item.json.to`)
|
||||
|
||||
### 6. Добавлен код для мержа данных проекта в сессию
|
||||
- Файл: `ticket_form/docs/CODE_MERGE_PROJECT_TO_SESSION.js`
|
||||
- Безопасная проверка существования ноды `CreateClientProject`
|
||||
- Добавлен `project_name` в Redis сессию
|
||||
|
||||
## Изменённые файлы
|
||||
|
||||
### Frontend
|
||||
- `ticket_form/frontend/src/pages/ClaimForm.tsx` - исправлена загрузка черновиков
|
||||
- `ticket_form/frontend/src/components/form/StepDraftSelection.tsx` - убран claim_id из заголовка
|
||||
- `ticket_form/frontend/src/components/form/StepWizardPlan.tsx` - добавлена отправка `uploads_field_labels`
|
||||
|
||||
### Backend
|
||||
- `include/Webservices/CreateClientProject.php` - добавлен возврат `project_name`
|
||||
|
||||
### Документация
|
||||
- `ticket_form/docs/CODE_FILES_RENAME_FIXED.js` - обновлён формат пути, добавлен `field_label`
|
||||
- `ticket_form/docs/CODE_MERGE_PROJECT_TO_SESSION.js` - новый файл для мержа данных проекта
|
||||
|
||||
## Git коммит
|
||||
- Commit: `486f3619`
|
||||
- Message: "Добавлен field_label в результат переименования файлов, исправлена загрузка черновиков, обновлен формат пути S3 с project_name"
|
||||
- Изменено: 212 файлов, +6706 строк, -125 строк
|
||||
|
||||
## Важные замечания
|
||||
|
||||
1. **Нода editfiletobd1 в n8n** должна добавлять `field_label` из `uploads_field_labels[i]` в каждый элемент `filesRows`
|
||||
2. **Нода Edit Fields13** должна использовать `.first()` для нод, возвращающих один item
|
||||
3. **Операция CreateClientProject** теперь возвращает `project_name`, который используется для формирования пути файлов
|
||||
|
||||
Reference in New Issue
Block a user