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