From e99fb09298b188673e602b8214bcde38a16bbd5f Mon Sep 17 00:00:00 2001 From: narawat Date: Fri, 13 Mar 2026 15:57:27 +0700 Subject: [PATCH] mermaid diagram --- docs/spec.md | 116 +++++++++++++++------------------------------------ 1 file changed, 34 insertions(+), 82 deletions(-) diff --git a/docs/spec.md b/docs/spec.md index fb79304..003de16 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -572,92 +572,44 @@ function fileserver_download_handler( ### Sending Flow -``` -┌─────────────────────────────────────────────────────────────────┐ -│ 1. User calls smartsend(subject, data) │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ 2. For each payload: │ -│ - Serialize data according to payload_type │ -│ - Calculate serialized size │ -└─────────────────────────────────────────────────────────────────┘ - │ - ├─ Size < Threshold ────────────────►┐ - │ │ - ▼ ▼ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 3. Direct Transport: │ │ -│ - Encode as Base64 │ │ -│ - Include in payload.data │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ │ - ▼ │ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 4. Build envelope with metadata │ │ -│ - correlation_id, msg_id, timestamp │ │ -│ - sender/receiver info │ │ -│ - payloads array │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ │ - ▼ │ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 5. Convert envelope to JSON string │ │ -│ 6. Publish to NATS subject │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 7. Return envelope and JSON string to caller │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ +```mermaid +flowchart TD + A[User calls smartsend\(subject, data\)] --> B[Serialize payload according to payload_type] + B --> C{Calculate serialized size} + C -->|Size < Threshold| D[Direct Transport: Encode as Base64] + C -->|Size >= Threshold| E[Link Transport: Upload to file server] + D --> F[Build envelope with metadata] + E --> F + F --> G[Convert envelope to JSON string] + G --> H[Publish to NATS subject] + H --> I[Return envelope and JSON string to caller] + + style A fill:#f9f9f9,stroke:#333 + style I fill:#e0e7ff,stroke:#3b82f6 + style D fill:#d1fae5,stroke:#10b981 + style E fill:#fef3c7,stroke:#f59e0b ``` ### Receiving Flow -``` -┌─────────────────────────────────────────────────────────────────┐ -│ 1. NATS message arrives │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ 2. Parse JSON envelope │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ 3. For each payload: │ -│ - Check transport type │ -└─────────────────────────────────────────────────────────────────┘ - │ - ├─ transport == "direct" ──────────►┐ - │ │ - ▼ ▼ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 4. Direct Transport: │ │ -│ - Extract Base64 data │ │ -│ - Decode Base64 │ │ -│ - Deserialize based on payload_type │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ │ - ▼ │ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 5. Link Transport: │ │ -│ - Extract URL from data │ │ -│ - Fetch with exponential backoff │ │ -│ - Deserialize based on payload_type │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ │ - ▼ │ -┌─────────────────────────────────────────────────────────────────┐ │ -│ 6. Replace payloads array with deserialized tuples │ │ -│ - [(dataname, data, type), ...] │ │ -└─────────────────────────────────────────────────────────────────┘ │ - │ -┌─────────────────────────────────────────────────────────────────┐ -│ 7. Return envelope with processed payloads │ -└─────────────────────────────────────────────────────────────────┘ +```mermaid +flowchart TD + A[NATS message arrives] --> B[Parse JSON envelope] + B --> C[For each payload: Check transport type] + C -->|transport == direct| D[Direct Transport: Extract Base64] + C -->|transport == link| E[Link Transport: Fetch from URL] + D --> F[Decode Base64] + E --> G[Fetch with exponential backoff] + F --> H[Deserialize based on payload_type] + G --> H + H --> I[Build payloads array] + I --> J[Replace payloads array with deserialized tuples] + J --> K[Return envelope with processed payloads] + + style A fill:#f9f9f9,stroke:#333 + style K fill:#e0e7ff,stroke:#3b82f6 + style D fill:#d1fae5,stroke:#10b981 + style E fill:#fef3c7,stroke:#f59e0b ``` ---