# Backend Requirements for Frontend Refactor 由于前端正在进行“破坏式”重构,删除了所有包含业务逻辑控制、状态推断、流程编排的代码(如 `useReportEngine`, `ExecutionStepManager`),后端必须接管以下职责,以支持纯被动式(Puppet Mode)的前端。 ## 1. 核心原则 前端不再拥有“大脑”,只拥有“眼睛”和“耳朵”。所有状态变更、流程流转、错误判断全由后端指令驱动。 ## 2. 接口需求 ### 2.1 统一事件流 (Unified Event Stream) 前端将只连接**一个**长连接通道(SSE 或 WebSocket),用于接收整个分析周期的所有信息。 * **Endpoint**: `/api/v2/workflow/events?request_id={id}` (建议) * **职责**: 聚合 NATS (Data Fetching), Internal State (Report Generator), Database (Persistence) 的所有事件。 ### 2.2 事件类型定义 (Protocol) 后端需要推送以下类型的事件,且 Payload 必须包含前端渲染所需的所有上下文,前端不再发起二次请求查询详情。 1. **`WORKFLOW_START`** * 标志流程开始。 * Payload: `{ symbol, market, template_id, timestamp }` 2. **`PHASE_CHANGED`** * **关键**: 前端不再判断何时切换界面,完全依赖此事件。 * Payload: `{ phase: 'DATA_FETCHING' | 'ANALYZING' | 'COMPLETED' | 'FAILED', previous_phase: '...' }` 3. **`TASK_PROGRESS` (Data Fetching Phase)** * 替代前端轮询 `/api/tasks`。 * Payload: `{ task_id, provider, status, progress, message }` * **注意**: 后端需负责聚合多个 Provider 的进度,前端只管展示列表。 4. **`MODULE_PROGRESS` (Analysis Phase)** * 替代旧的 SSE 流。 * Payload: `{ module_id, content_delta, status }` 5. **`WORKFLOW_ERROR`** * **关键**: 包含错误级别(Fatal/Warning)。前端只展示,不判断是否重试。 * Payload: `{ code, message, is_fatal, suggestion }` ## 3. 逻辑接管需求 ### 3.1 状态机迁移 (State Transitions) * **旧逻辑 (已删)**: 前端轮询任务 -> `if (all_tasks_done) start_analysis()`. * **新逻辑**: 后端 `Workflow Orchestrator` 监听任务完成事件 -> 自动触发分析 -> 推送 `PHASE_CHANGED: ANALYZING` 给前端。 ### 3.2 容错与部分成功 (Partial Success) * **旧逻辑 (已删)**: 前端判断 `if (failed_tasks < total) continue`. * **新逻辑**: 后端决定数据缺失量是否允许继续分析。如果允许,直接进入分析阶段;如果不允许,推送 `WORKFLOW_ERROR`。 ### 3.3 超时控制 (Timeout) * **旧逻辑 (已删)**: 前端 `setTimeout(10min)`. * **新逻辑**: 后端设置执行超时。如果超时,主动推送 Error 事件关闭连接。前端仅处理网络层面的断开重连。 ### 3.4 断点恢复 (Resume) * **需求**: 当用户刷新页面重连 SSE 时,后端必须立即推送一条 `SNAPSHOT` 事件,包含当前所有已完成的任务、已生成的报告片段、当前所处的阶段。 * **目的**: 防止前端因为丢失历史事件而无法渲染完整界面。 ## 4. 废弃接口 以下接口的前端调用代码已被删除,后端可酌情保留用于调试,但业务不再依赖: * `GET /api/tasks/{id}` (轮询接口) * `GET /api/analysis-results/stream` (旧的纯分析流,需升级为统一流)