Commit 5aa6928d authored by Vũ Hoàng Anh's avatar Vũ Hoàng Anh

docs: add database schema cookbook and fix mermaid syntax

parent 0a828fff
......@@ -14,10 +14,10 @@ sequenceDiagram
Uvicorn->>FastAPI: App Startup (yield)
FastAPI->>Redis: redis_cache.initialize()
FastAPI->>EventBus: event_bus.start()
FastAPI->>Worker: report_worker_loop() & start_publish_engine()
FastAPI->>Worker: report_worker_loop() and start_publish_engine()
FastAPI-->>Uvicorn: Ready for Requests
note over Uvicorn, FastAPI: Phục vụ HTTP/WS Requests
Note over Uvicorn, FastAPI: Phục vụ HTTP/WS Requests
Uvicorn->>FastAPI: Shutdown Signal (Ctrl+C / Reload)
FastAPI->>EventBus: event_bus.stop()
......
Kiến trúc Lead Stage AI được thiết kế theo dạng **Micro-modular pipeline** dựa trên LangGraph, tách biệt hoàn toàn giữa việc *phân loại ý định* (Classifier) và *sinh ngôn ngữ* (Stylist).
<div class="mermaid">
graph TD
%% Styling
classDef user fill:#a5d8ff,stroke:#4a9eed,stroke-width:2px,color:#000,rx:8,ry:8
classDef classifier fill:#d0bfff,stroke:#8b5cf6,stroke-width:2px,color:#000,rx:8,ry:8
classDef tools fill:#fff3bf,stroke:#f59e0b,stroke-width:2px,color:#000,rx:8,ry:8
classDef stylist fill:#b2f2bb,stroke:#22c55e,stroke-width:2px,color:#000,rx:8,ry:8
U[👤 User Chat]:::user
C[🧠 Classifier Agent<br/>(Fast Router)]:::classifier
T[🔍 Search Tools<br/>(Meilisearch / DB)]:::tools
S[👗 Stylist Agent<br/>(Combo Maker)]:::stylist
U -- "1. Gửi tin nhắn" --> C
C -- "2. Rút trích tham số<br/>(Gọi Tool)" --> T
T -- "3. Trả về Danh sách<br/>sản phẩm thô" --> S
S -- "4. Tổng hợp &<br/>Gợi ý Combo" --> U
</div>
### Thiết kế hai tầng (Two-Stage Agent)
Thay vì dùng một Agent to (monolith) để làm mọi thứ, hệ thống chia làm 2 AI:
1. **AI #1 (Classifier + Tool Router):** Chuyên trách đọc câu hỏi của user, lịch sử chat (`user_insight`, `chat_history_summary`) để quyết định xem user đang ở Stage nào (Awareness, Interest, Consideration, Decision, Retention) và gọi Tool tương ứng (ví dụ: `lead search tool`, `check is stock`).
......
Tài liệu này mô tả chi tiết thiết kế các bảng dữ liệu chính từ nguồn `shared_source` (StarRocks/MySQL) được sử dụng để tích hợp vào hệ thống Chatbot AI.
### 1. `shared_source.magento_product_dimension_with_text_embedding`
Bảng dữ liệu sản phẩm tổng hợp. Bao gồm thông tin kích thước, mô tả và vector embedding để tìm kiếm ngữ nghĩa.
| Column Name | Data Type | Note |
|---|---|---|
| `internal_ref_code`* | `varchar` | Mã tổng sản phẩm từ dữ liệu nội bộ |
| `magento_ref_code`* | `varchar` | Mã tổng/tổng-màu tổng hợp từ db magento |
| `product_color_code`* | `varchar` | Mã tổng-màu từ dữ liệu nội bộ |
| `product_name` | `varchar` | Tên sản phẩm |
| `color_code` | `varchar` | Mã màu (vd: SW001) |
| `master_color` | `varchar` | Màu chủ đạo (vd: Trắng/ White) |
| `product_color_name` | `varchar` | Tên màu (vd: White 001) |
| `season_sale` | `varchar` | Mùa sale (vd: Summer) |
| `season` | `varchar` | Mùa ra mắt (vd: Spring Summer) |
| `style` | `varchar` | Phong cách thiết kế sản phẩm (vd: Basic) |
| `fitting` | `varchar` | Kiểu dáng sản phẩm (vd: Regular) |
| `size_scale` | `varchar` | Size sản phẩm (vd: S\|M\|L\|XL) |
| `graphic` | `varchar` | Hình in |
| `pattern` | `varchar` | Hoạ tiết |
| `weaving` | `varchar` | Kiểu dệt |
| `shape_detail` | `varchar` | Chi tiết hình dáng |
| `form_neckline` | `varchar` | Kiểu dáng cổ đối với áo (vd: Crew Neck) |
| `form_sleeve` | `varchar` | Kiểu dáng tay đối với áo (vd: Short Sleeve) |
| `form_length` | `varchar` | Độ dài form |
| `form_waistline` | `varchar` | Đường eo |
| `form_shoulderline` | `varchar` | Đường vai |
| `material` | `varchar` | Chất liệu |
| `product_group` | `varchar` | Nhóm sản phẩm (vd: Top) |
| `product_line_vn` | `varchar` | Dòng hàng (tiếng Việt) (vd: Áo phông) |
| `unit_of_measure` | `varchar` | Đơn vị bán (vd: Chiếc) |
| `sale_price` | `decimal` | Giá gốc của sản phẩm |
| `orginial_price` | `decimal` | Giá khuyến mãi của sản phẩm |
| `discount_amount` | `decimal` | Phần giảm giá (tính toán từ sale_price và original_price) |
| `material_group` | `varchar` | Nhóm chất liệu |
| `product_line_en` | `varchar` | Dòng hàng (tiếng Anh) |
| `age_by_product` | `varchar` | Tuổi |
| `gender_by_product` | `varchar` | Giới tính |
| `quantity_sold` | `int` | Số lượng đã bán |
| `is_new_product` | `boolean` | `TRUE` nếu sản phẩm mới trong vòng 2 tháng, ngược lại `FALSE` |
| `product_image_url` | `string` | URL ảnh sản phẩm hiển thị trên web |
| `description_text` | `string` | Mô tả ngắn |
| `product_image_url_thumbnail` | `string` | URL ảnh thumbnail |
| `product_web_url` | `string` | URL sản phẩm trên web + UTM param để tracking |
| `product_web_material` | `string` | Mô tả chất liệu sản phẩm trên web |
| `description_text_full` | `string` | Mô tả đầy đủ để nhúng vector |
| `vector`* | `array<float>` | Vector embedding của `description_text_full` cho chatbot search bằng vector index |
---
### 2. `shared_source.chatbot_rsa_salerule_with_text_embedding`
Bảng dữ liệu CTKM (online/offline) tổng hợp từ magento + người dùng input.
| Column Name | Data Type | Note |
|---|---|---|
| `id`* | `text` | Primary key (dùng để update dữ liệu) |
| `from_date` | `date` | Ngày bắt đầu CTKM |
| `to_date` | `date` | Ngày kết thúc CTKM |
| `name` | `varchar` | Tên ngắn gọn của CTKM |
| `description` | `string` | Mô tả CTKM (cách thức áp dụng, địa điểm áp dụng,...) |
| `description_full` | `string` | Thông tin mô tả tổng hợp trước khi embedding |
| `applied_channel` | `varchar` | Kênh áp dụng CTKM (`only_online`/`only_offline`/`both`) |
| `vector` | `array<float>` | Vector embedding của `description_full` |
---
### 3. `shared_source.chatbot_rsa_knowledge`
Bảng dữ liệu thông tin chung (chính sách khách hàng, câu hỏi thường gặp,...).
| Column Name | Data Type | Note |
|---|---|---|
| `id`* | `varchar` | Primary key (dùng để update dữ liệu) |
| `title` | `varchar` | Tiêu đề kiến thức |
| `content` | `text` | Nội dung kiến thức chi tiết |
| `metadata` | `json` | Các meta thông tin đính kèm |
| `embedding` | `array<float>` | Vector embedding của nội dung cho chatbot search bằng vector index |
---
### 4. `shared_source.chatbot_rsa_store_schedule_with_text_embedding`
Bảng dữ liệu cửa hàng (địa chỉ, thời gian mở/đóng cửa hàng ngày).
| Column Name | Data Type | Note |
|---|---|---|
| `id`* | `varchar` | Primary key (dùng để update dữ liệu) |
| `store_name` | `varchar` | Tên cửa hàng (vd: CANIFA - 139 Bạch Mai) |
| `address` | `varchar` | Địa chỉ cửa hàng dạng text |
| `city` | `varchar` | Quận/huyện (vd: Quận Hai Bà Trưng) |
| `state` | `varchar` | Thành phố (vd: Hà Nội) |
| `phone_number` | `varchar` | Số điện thoại của cửa hàng |
| `schedule_name` | `varchar` | Thời gian mở cửa - đóng cửa dạng text |
| `time_open_today` | `time` | Thời gian mở cửa hôm nay (thay đổi theo ngày) |
| `time_close_today` | `time` | Thời gian đóng cửa hôm nay (thay đổi theo ngày) |
| `description_full` | `text` | Thông tin mô tả tổng hợp dạng text trước khi embedding |
| `vector` | `array<float>` | Vector embedding của `description_full` |
Dưới đây là danh sách toàn bộ các bảng trong hệ thống (được thu thập từ thiết kế PostgreSQL và SQLite nội bộ của Backend).
### Bảng Hệ thống Chat & AI (`dashboard_canifa` Schema)
| Tên Bảng | Chức năng chính |
|---|---|
| `dashboard_canifa.ai_outfit_rules` | Lưu trữ các quy tắc phối đồ (fashion rules) do Stylist / Admin định nghĩa |
| `dashboard_canifa.ai_outfit_product_matches` | Lưu trữ lịch sử các combo / outfit đã được AI ghép thành công |
| `dashboard_canifa.ai_outfit_set` | Lưu thông tin chi tiết một bộ Outfit (thông tin chung) |
| `dashboard_canifa.ai_outfit_items` | Lưu danh sách các sản phẩm (items) nằm trong một bộ Outfit cụ thể |
| `dashboard_canifa.ultra_descriptions` | Lưu trữ các đoạn mô tả sản phẩm siêu cấp (Ultra Description) do n8n gen ra |
| `dashboard_canifa.chatbot_fashion_rules` | Rule thời trang chung cho Chatbot |
| `dashboard_canifa.chat_history` | Lưu trữ lịch sử hội thoại của người dùng |
| `dashboard_canifa.sql_trace_sessions` | Lưu vết (trace) các phiên chạy Text-to-SQL |
---
### Bảng Quản trị & Hệ thống (Admin & Dashboard)
| Tên Bảng | Chức năng chính |
|---|---|
| `dashboard_canifa.admin_users` | Danh sách tài khoản Quản trị viên truy cập Dashboard |
| `dashboard_canifa.activity_logs` | Nhật ký hoạt động (Audit logs) của hệ thống và Admin |
| `dashboard_canifa.system_settings` | Các cấu hình hệ thống (Settings) |
| `dashboard_canifa.saved_reports` | Các báo cáo được lưu lại trên Dashboard |
| `dashboard_users` | Thông tin user (khách hàng) cho ứng dụng Dashboard/Notes |
| `dashboard_links` | Quản lý các đường dẫn URL / Deep links |
| `faqs` | Câu hỏi thường gặp lưu trong DB |
---
### Bảng Ứng dụng Notes (Cuccu Note)
| Tên Bảng | Chức năng chính |
|---|---|
| `dashboard_notes` | Lưu trữ nội dung ghi chú (Notes) của người dùng |
| `note_comments` | Lưu trữ bình luận trên từng ghi chú |
| `note_notifications` | Lưu thông báo liên quan đến ghi chú |
{
"title": "Database Schema & Tables",
"description": "Tài liệu thiết kế cơ sở dữ liệu chi tiết, bao gồm các bảng từ nguồn StarRocks (shared_source) và PostgreSQL/SQLite (dashboard_canifa).",
"sections": [
{
"id": "main-tables",
"title": "Các bảng dữ liệu chính (Shared Source)",
"type": "markdown",
"file": "01_tables.md"
},
{
"id": "other-tables",
"title": "Tất cả các bảng trong hệ thống (All Tables)",
"type": "markdown",
"file": "02_all_tables.md"
}
]
}
......@@ -5,7 +5,8 @@
"recipes": [
{ "id": "01-architecture", "title": "Platform Architecture Overview" },
{ "id": "01b-database", "title": "Database Layer & SQLite Mock" },
{ "id": "01c-auth-routing", "title": "Auth & Routing Flow" }
{ "id": "01c-auth-routing", "title": "Auth & Routing Flow" },
{ "id": "27-database-schema", "title": "Database Schema & Tables" }
]
},
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment