Untitled

Logic Get Rooms

flowchart TD
    A([Client gọi GET /products/hotels/rooms]) --> B{progressive=true?}

    B -- Không --> C[Đọc room cache]
    C --> D{Cache hit?}
    D -- Có --> E([Trả về rooms])
    D -- Không --> F[Gọi EasyGDS Gateway]
    F --> G[Map rooms _group_rooms + Olympus]
    G --> H[Tính giá Pricer]
    H --> I[Lưu Redis cache_key = rooms]
    I --> E

    B -- Có --> J["Đọc Redis
    cache_key → cached_rooms
    cache_key:progress → cached_progress"]
    J --> K{cached_progress == 1 AND có cached_rooms?}

    K -- Có --> L(["Trả về cached_rooms + progress=1
    ~2ms ✅"])

    K -- Không --> M["Gọi EasyGDS Gateway
    GET /api/v2/getrooms
    → new_rooms, room_progress"]
    M --> N["Tính delta
    Lọc rates chưa có trong cached_rooms"]
    N --> O{Có delta rooms?}
    O -- Có --> P["Tính giá delta
    Pricer chỉ cho rooms mới"]
    O -- Không --> Q[priced_delta = empty]
    P --> R[Merge cached_rooms + priced_delta]
    Q --> R
    R --> S["Lưu Redis
    cache_key = merged_rooms
    cache_key:progress = room_progress"]
    S --> T(["Trả về merged_rooms + room_progress
    ~3.3s lần đầu"])

    style L fill:#22c55e,color:#fff
    style T fill:#3b82f6,color:#fff
    style E fill:#3b82f6,color:#fff