{
    "title": "Session & History Merge",
    "description": "Tìm hiểu cách hệ thống quản lý lịch sử trò chuyện và cơ chế hợp nhất (Merge) dữ liệu khi khách hàng đăng nhập.",
    "diagram": "diagrams/history-merge.svg",
    "sections": [
        {
            "title": "Anonymous vs Profile History",
            "type": "text",
            "content": "Để tối ưu trải nghiệm, hệ thống cho phép khách hàng vãng lai (Guest) trò chuyện ngay lập tức mà không cần login. Lịch sử này được lưu trữ gắn với một <code>device_id</code> duy nhất trong Redis (TTL 24h).<br>Khi người dùng thực hiện đăng nhập, hệ thống sẽ tự động quét các tin nhắn từ <code>device_id</code> hiện tại và hợp nhất chúng vào hồ sơ <code>user_id</code> vĩnh viễn trong Postgres."
        },
        {
            "title": "Chiến lược Hợp nhất (Merge Strategy)",
            "type": "text",
            "content": "- <b>Timeline Alignment:</b> Các tin nhắn được sắp xếp lại theo thời gian thực (Timestamp) để đảm bảo mạch hội thoại logic.<br>- <b>Deduplication:</b> Loại bỏ các tin nhắn trùng lặp nếu người dùng đăng nhập lại nhiều lần trên cùng một thiết bị.<br>- <b>Context Enrichment:</b> Các thông tin insight thu thập được trong giai đoạn Guest (giới tính, sở thích) cũng được cập nhật vào User Profile mới."
        },
        {
            "title": "API History",
            "type": "api",
            "endpoints": [
                { "method": "GET", "path": "/api/history/list", "description": "Lấy danh sách các phiên hội thoại của người dùng." },
                { "method": "POST", "path": "/api/merge-history/preview", "description": "Xem trước kết quả hợp nhất trước khi lưu chính thức." },
                { "method": "DELETE", "path": "/api/history/{id}", "description": "Xóa một phiên hội thoại cụ thể." }
            ]
        }
    ]
}
