# Request Flow Sequence Diagram This diagram shows the complete request flow from user submission to job completion and status polling. ```mermaid sequenceDiagram participant User participant API as API Server
(Orleans) participant DB as PostgreSQL
(Job Queue) participant Worker as Compute Worker participant Influx as InfluxDB User->>API: POST /api/backtest/bundle API->>API: Create BundleBacktestRequest API->>API: Generate BacktestJobs from variants API->>DB: INSERT BacktestJobs (Status: Pending) API-->>User: 202 Accepted
{bundleRequestId, status: "Queued"} Note over Worker: Polling every 5 seconds Worker->>DB: SELECT pending jobs
(ORDER BY priority, createdAt) DB-->>Worker: Return pending jobs Worker->>DB: UPDATE job
(Status: Running, AssignedWorkerId) Worker->>Influx: Load candles for backtest Influx-->>Worker: Return candles loop Process each candle Worker->>Worker: Run backtest logic Worker->>DB: UPDATE job progress end Worker->>DB: UPDATE job
(Status: Completed, ResultJson) Worker->>DB: UPDATE BundleBacktestRequest
(CompletedBacktests++) User->>API: GET /api/backtest/bundle/{id}/status API->>DB: SELECT BundleBacktestRequest + job stats DB-->>API: Return status API-->>User: {status, progress, completed/total} ``` ## Flow Steps 1. **User Request**: User submits bundle backtest request 2. **API Processing**: API creates bundle request and generates individual backtest jobs 3. **Job Queue**: Jobs are inserted into database with `Pending` status 4. **Immediate Response**: API returns 202 Accepted with bundle request ID 5. **Worker Polling**: Compute workers poll database every 5 seconds 6. **Job Claiming**: Worker claims jobs using PostgreSQL advisory locks 7. **Candle Loading**: Worker loads candles from InfluxDB 8. **Backtest Processing**: Worker processes backtest with progress updates 9. **Result Storage**: Worker saves results and updates bundle progress 10. **Status Polling**: User polls API for status updates