# 🏗️ Kế Hoạch: Cuccu Note Workspace Isolation (Tách Biệt Human & AI)

## 🎯 Mục Tiêu Cốt Lõi
Biến Cuccu Note thành một "Trung tâm chỉ huy" bằng cách chia cắt hoàn toàn dữ liệu. Chúng ta sẽ áp dụng cơ chế **"Hứng trên đầu"** bằng `workspace_id`.
Mục đích:
- Giữ sạch sẽ không gian dòng thời gian (Timeline) của con người.
- Hứng toàn bộ Log, Cảnh báo (SOS), và Tóm tắt sự kiện từ **Cuccu Sales AI** vào một không gian riêng biệt (AI Workspace).

---

## 🛠️ Giai Đoạn 1: Database Schema (SQLite) & Cấu trúc
*Đòi hỏi: Chỉnh sửa lại file `common/sqlite_client.py`.*

1. **Hiệu chỉnh bảng `memos`**:
   - Thêm cột `workspace_id` (TEXT) vào bảng `memos`.
   - Giá trị mặc định (Default): `'PERSONAL'` (Dành cho người).
   - Giá trị hệ thống (System): `'AI_SALES_CRM'` (Dành cho webhooks từ hệ thống Sales).
   - Tạo Index trên cột `workspace_id` để Query không bị sụt giảm hiệu năng khi Data lớn. `CREATE INDEX idx_memos_workspace ...`

2. **(Tùy chọn) Bảng `workspaces`**:
   - Tạm thời chưa cần tạo bảng Workspaces nếu hardcode 2 loại trên để làm nhanh, nhưng để chuẩn chỉnh thì cứ tạo 1 bảng `workspaces` định danh 2 cái Rổ này.

---

## 🔌 Giai Đoạn 2: Xử Lý Backend API (FastAPI)
*Đòi hỏi: Chỉnh sửa luồng Fetch & Insert trong `services.py` và `memo_routes.py`.*

1. **Luồng đẩy (POST /memos)**:
   - Mở rộng Pydantic Schema (`MemoCreate`) để nhận thêm biến tùy chọn `workspace_id`.
   - Nếu call từ Webhook của AI Sales -> Request BẮT BUỘC inject `workspace_id = "AI_SALES_CRM"`.
   - Nếu tạo note bằng tay trên giao diện web -> Request mặc định đẩy xuống `workspace_id = "PERSONAL"`.

2. **Luồng đọc (GET /memos)**:
   - Bổ sung tham số Query Params: `GET /api/v1/memos?workspace_id=PERSONAL`.
   - File `services.py` BẮT BUỘC chèn câu lệnh truy vấn SQLite `WHERE workspace_id = ?`. 
   - Tuyệt đối không cho phép truy vấn lọt dữ liệu (Ví dụ: đang ở Personal mà fetch nhầm cái Note của AI).

---

## 🖥️ Giai Đoạn 3: Cập nhật Frontend UI
*Đòi hỏi: Chỉnh sửa giao diện React để có Dropdown Chuyển đổi tầng.*

1. **Top-Level Switcher**:
   - Đặt một UI Dropdown (hoặc Toggle Button) to bảng ở thanh Menu bên trái (Sidebar).
   - Các lựa chọn: **👤 Ghi chú Cá Nhân** vs **🤖 Báo cáo AI Sales**.
2. **State Management**:
   - Khi bấm chuyển Rổ (Workspace) -> Set Global State.
   - Frontend tự động Clear cái Cột Timeline, gọi API `GET /memos` mới kèm theo parameter `workspace_id` tương ứng để vẽ lại giao diện.

---

## 🧪 Giai Đoạn 4: Automated Testing Protocol (LUẬT THÉP CHO AI)
*Đây là yêu cầu ép khuôn cho AI Code, KHÔNG CÓ BÀI TEST THÌ KHÔNG ĐƯỢC CHỐT DONE!*

1. **Backend Integration Tests**:
   - Mở (hoặc tạo) file `tests/test_memos.py`. Thêm kịch bản test:
     - Tạo Memo 1 (không truyền `workspace_id`) -> Kiểm tra DB xem mặc định là `PERSONAL` chưa.
     - Tạo Memo 2 (truyền `workspace_id="AI_SALES_CRM"`).
     - Fetch `GET /memos?workspace_id=PERSONAL` -> Phải trả về số lượng 1 (Memo 1). Tuyệt đối không chứa Memo 2.
     - Fetch `GET /memos?workspace_id=AI_SALES_CRM` -> Phải trả về Memo 2.
2. **Lệnh chạy bắt buộc**:
   ```bash
   pytest tests/test_memos.py -k "test_workspace_isolation" -v
   ```
3. Pass 100% test case mới được gạch bỏ Task! Đóng ticket!
