mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-26 17:26:23 +02:00
68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
# Mô Hình Dữ Liệu (Backend)
|
|
|
|
Tài liệu này mô tả schema cơ sở dữ liệu Postgres, được quản lý bởi SQLAlchemy và Alembic.
|
|
|
|
## Các Thực Thể Chính (Core Entities)
|
|
|
|
### `User`
|
|
Đại diện cho người dùng hệ thống.
|
|
- **`id`**: `Integer` (Primary Key)
|
|
- **`email`**: `String` (Unique)
|
|
- **`hashed_password`**: `String`
|
|
- **`is_active`**: `Boolean`
|
|
- **`created_at`**: `DateTime`
|
|
|
|
### `Usage`
|
|
Theo dõi hạn ngạch sử dụng (quota) của người dùng.
|
|
- **`id`**: `Integer`
|
|
- **`user_id`**: `ForeignKey -> User`
|
|
- **`request_count`**: `Integer` (Số request API đã gọi)
|
|
- **`token_consumed`**: `Integer` (Số token LLM đã dùng)
|
|
|
|
### `Document`
|
|
Đơn vị kiến thức cơ bản. Một tài liệu có thể là một file PDF, một trang web, hoặc một ghi chú Notion.
|
|
- **`id`**: `Integer`
|
|
- **`title`**: `String`
|
|
- **`content`**: `Text` (Nội dung thô, nếu có)
|
|
- **`url`**: `String` (Nguồn gốc)
|
|
- **`source_type`**: `Enum` (PDF, WEB, NOTION, SLACK...)
|
|
- **`owner_id`**: `ForeignKey -> User`
|
|
- **`embedding_status`**: `Enum` (PENDING, INDEXED, FAILED)
|
|
|
|
### `Chunk`
|
|
Phần nhỏ của tài liệu dùng cho Vector Search.
|
|
- **`id`**: `Integer`
|
|
- **`document_id`**: `ForeignKey -> Document`
|
|
- **`content`**: `Text` (Nội dung của đoạn chunk)
|
|
- **`embedding`**: `Vector(1536)` (Vector đại diện, dùng cho pgvector)
|
|
- **`metadata`**: `JSONB` (Thông tin bổ sung)
|
|
|
|
### `ChatThread`
|
|
Đại diện cho một cuộc hội thoại.
|
|
- **`id`**: `Integer`
|
|
- **`user_id`**: `ForeignKey -> User`
|
|
- **`title`**: `String`
|
|
- **`created_at`**: `DateTime`
|
|
|
|
### `ChatMessage`
|
|
Một tin nhắn trong cuộc hội thoại.
|
|
- **`id`**: `Integer`
|
|
- **`thread_id`**: `ForeignKey -> ChatThread`
|
|
- **`role`**: `Enum` (USER, ASSISTANT, SYSTEM)
|
|
- **`content`**: `Text`
|
|
- **`tool_calls`**: `JSONB` (Lưu trữ các function calls nếu có)
|
|
|
|
### `ConnectorCredential`
|
|
Lưu trữ token xác thực cho các ứng dụng bên ngoài.
|
|
- **`id`**: `Integer`
|
|
- **`user_id`**: `ForeignKey -> User`
|
|
- **`connector_type`**: `String` (ví dụ: "google_drive")
|
|
- **`encrypted_token`**: `String` (Token đã mã hóa)
|
|
- **`refresh_token`**: `String`
|
|
|
|
## Mối Quan Hệ ERD (Tóm tắt)
|
|
- `User` **1 -- n** `Document`
|
|
- `Document` **1 -- n** `Chunk`
|
|
- `User` **1 -- n** `ChatThread`
|
|
- `ChatThread` **1 -- n** `ChatMessage`
|
|
- `User` **1 -- 1** `Usage`
|