# Chiến lược Hợp nhất (Merge Strategy)

Khi khách hàng thực hiện Đăng nhập (Login), hệ thống áp dụng chiến lược kết nối danh tính và hợp nhất phiên trò chuyện (Merge History). Quá trình này hiện đang được triển khai qua các API Mock (như `/api/mock/login` và `/api/merge-history/preview`).

## Các nguyên tắc Hợp nhất
1. **Identity Linking:** `device_id` được liên kết với `user_id` thông qua một In-Memory Set (`_identity_links`).
2. **Timeline Alignment:** Lấy lịch sử theo tất cả các key (`user_id` và các `device_id` liên kết). Danh sách tin nhắn được gộp lại và sắp xếp (sort) lại theo thời gian thực (Timestamp) để đảm bảo mạch hội thoại logic.
3. **Archive & Reset:** Hỗ trợ tính năng Archive (Lưu trữ). Hệ thống sẽ đổi tên key Redis hiện tại thành `..._archived_{timestamp}`, xóa User Insight (để AI quên context cũ) và reset chat. Giới hạn tính năng này là 5 lần/ngày (`reset_limit_service`).

## Sequence Diagram Hợp nhất

```mermaid
sequenceDiagram
    participant C as Client (device)
    participant M as Middleware
    participant A as Auth API
    participant R as Redis (History)
    
    C->>M: Chat với tư cách Guest
    M->>R: Lưu vào chat_history:{device_id}:default
    
    C->>A: Yêu cầu Đăng nhập (gửi device_id)
    A->>A: Lưu Link (user_id -> device_id)
    A-->>C: Access Token (is_authenticated=True)
    
    C->>M: Gọi API Load History (kèm Token)
    M->>R: Truy vấn chat_history:{user_id}
    M->>R: Truy vấn chat_history:{device_id}
    R-->>M: Trả về tập hợp messages
    Note over M: Sắp xếp messages theo Timestamp
    M-->>C: Trả về merged history
```