feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# AIA - AI智能问答模块:数据库设计
|
||||
|
||||
> **<EFBFBD><EFBFBD>𧋦嚗?* v1.0
|
||||
> **<EFBFBD>湔鰵<EFBFBD>園𡢿嚗?* 2025-11-12
|
||||
> **<EFBFBD>唳旿摨廍chema嚗?* `aia_schema`
|
||||
> **<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <20>?撌脣<E6928C><E884A3>賢僎餈<E5838E>宏
|
||||
> **版本:** v1.0
|
||||
> **更新时间:** 2025-11-12
|
||||
> **数据库Schema:** `aia_schema`
|
||||
> **状态:** ✅ 已实施并迁移
|
||||
|
||||
---
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
|
||||
### 功能定位
|
||||
|
||||
**AIA嚗㇁I Intelligent Assistant嚗? AI<EFBFBD>箄<EFBFBD><EFBFBD>桃<EFBFBD>璅∪<EFBFBD>**<EFBFBD>臬像<EFBFBD>啁<EFBFBD><EFBFBD>詨<EFBFBD>撖寡<EFBFBD>撘閙<EFBFBD>嚗峕<EFBFBD>靘𨥈<EFBFBD>
|
||||
**AIA(AI Intelligent Assistant)- AI智能问答模块**是平台的核心对话引擎,提供:
|
||||
|
||||
1. **项目管理** - 研究项目的创建和管理
|
||||
2. **<EFBFBD>箄<EFBFBD>撖寡<EFBFBD>** - <EFBFBD>箔<EFBFBD>LLM<EFBFBD><EFBFBD><EFBFBD>銝𡁻<EFBFBD><EFBFBD>笔笆霂?
|
||||
2. **智能对话** - 基于LLM的专业领域对话
|
||||
3. **通用问答** - 不绑定项目的通用AI对话
|
||||
4. **瘨<EFBFBD><EFBFBD>蝞∠<EFBFBD>** - 撖寡<EFBFBD><EFBFBD><EFBFBD>蟮霈啣<EFBFBD><EFBFBD>峕<EFBFBD>蝝?
|
||||
4. **消息管理** - 对话历史记录和检索
|
||||
|
||||
### 核心业务场景
|
||||
|
||||
- 用户创建临床研究项目
|
||||
- 在项目内与AI进行专业对话
|
||||
- 雿輻鍂<EFBFBD>𡁶鍂撖寡<EFBFBD><EFBFBD>蠘<EFBFBD>敹恍<EFBFBD>笔倮霂?
|
||||
- <EFBFBD>亦<EFBFBD><EFBFBD>𣬚恣<EFBFBD><EFBFBD>笆霂嘥<EFBFBD><EFBFBD>?
|
||||
- 使用通用对话功能快速咨询
|
||||
- 查看和管理对话历史
|
||||
|
||||
---
|
||||
|
||||
@@ -53,45 +53,45 @@ GRANT ALL ON SCHEMA aia_schema TO aiclinical_admin;
|
||||
```
|
||||
|
||||
### 数据迁移
|
||||
- **餈<EFBFBD>宏<EFBFBD>園𡢿嚗?* 2025-11-12
|
||||
- **皞𠩐chema嚗?* public
|
||||
- **餈<EFBFBD>宏<EFBFBD>𡁏𧋦嚗?* `docs/09-<EFBFBD>嗆<EFBFBD>摰墧鴌/migration-scripts/003-migrate-aia.sql`
|
||||
- **<EFBFBD>唳旿摰峕㟲<EFBFBD>改<EFBFBD>** <EFBFBD>?100%餈<EFBFBD>宏<EFBFBD>𣂼<EFBFBD>
|
||||
- **迁移时间:** 2025-11-12
|
||||
- **源Schema:** public
|
||||
- **迁移脚本:** `docs/09-架构实施/migration-scripts/003-migrate-aia.sql`
|
||||
- **数据完整性:** ✅ 100%迁移成功
|
||||
|
||||
---
|
||||
|
||||
## 数据库表设计
|
||||
|
||||
### 銵典<EFBFBD>銵?
|
||||
### 表列表
|
||||
|
||||
| 銵典<EFBFBD> | <20>券<EFBFBD>?| 銵峕㺭嚗<E3BAAD>摯霈∴<E99C88> | <20>嗆<EFBFBD>?|
|
||||
| 表名 | 用途 | 行数(估计) | 状态 |
|
||||
|------|------|------------|------|
|
||||
| `projects` | <EFBFBD>𠉛弦憿寧𤌍 | 1-100/<EFBFBD>冽<EFBFBD> | <20>?撌脤<E6928C>蝵?|
|
||||
| `conversations` | 憿寧𤌍撖寡<EFBFBD> | 10-500/憿寧𤌍 | <20>?撌脤<E6928C>蝵?|
|
||||
| `messages` | 撖寡<EFBFBD>瘨<EFBFBD><EFBFBD> | 10-1000/撖寡<EFBFBD> | <20>?撌脤<E6928C>蝵?|
|
||||
| `general_conversations` | <EFBFBD>𡁶鍂撖寡<EFBFBD> | 10-100/<EFBFBD>冽<EFBFBD> | <20>?撌脤<E6928C>蝵?|
|
||||
| `general_messages` | <EFBFBD>𡁶鍂撖寡<EFBFBD>瘨<EFBFBD><EFBFBD> | 10-1000/撖寡<EFBFBD> | <20>?撌脤<E6928C>蝵?|
|
||||
| `projects` | 研究项目 | 1-100/用户 | ✅ 已部署 |
|
||||
| `conversations` | 项目对话 | 10-500/项目 | ✅ 已部署 |
|
||||
| `messages` | 对话消息 | 10-1000/对话 | ✅ 已部署 |
|
||||
| `general_conversations` | 通用对话 | 10-100/用户 | ✅ 已部署 |
|
||||
| `general_messages` | 通用对话消息 | 10-1000/对话 | ✅ 已部署 |
|
||||
|
||||
**<EFBFBD>餉恣嚗?* 5銝芾”
|
||||
**总计:** 5个表
|
||||
|
||||
---
|
||||
|
||||
### 1. projects - <EFBFBD>𠉛弦憿寧𤌍銵?
|
||||
### 1. projects - 研究项目表
|
||||
|
||||
**<EFBFBD>券<EFBFBD>䈑<EFBFBD>** 摮睃<E691AE><E79D83>冽<EFBFBD><E586BD>𥕦遣<F0A595A6><E981A3>葩摨羓<E691A8>蝛園★<E59C92>?
|
||||
**用途:** 存储用户创建的临床研究项目
|
||||
|
||||
#### 銵函<EFBFBD><EFBFBD>?
|
||||
#### 表结构
|
||||
|
||||
| 摮埈挾<EFBFBD>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|
||||
| 字段名 | 数据类型 | 约束 | 说明 |
|
||||
|--------|---------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 憿寧𤌍<EFBFBD>臭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
|
||||
| id | TEXT | PRIMARY KEY | 项目唯一标识(UUID) |
|
||||
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
|
||||
| name | TEXT | NOT NULL | 项目名称 |
|
||||
| background | TEXT | NULL | 研究背景 |
|
||||
| research_type | TEXT | NULL | 研究类型(observational/experimental等) |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
|
||||
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<EFBFBD><EFBFBD>斗𧒄<EFBFBD>?|
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 软删除时间 |
|
||||
|
||||
#### Prisma Model
|
||||
|
||||
@@ -120,32 +120,32 @@ model Project {
|
||||
|
||||
#### 业务规则
|
||||
|
||||
1. **頧臬<EFBFBD><EFBFBD>斗㦤<EFBFBD>?* - 雿輻鍂`deleted_at`<EFBFBD><EFBFBD>扇<EFBFBD>𣳇膄嚗䔶<EFBFBD><EFBFBD>拍<EFBFBD><EFBFBD>𣳇膄
|
||||
1. **软删除机制** - 使用`deleted_at`标记删除,不物理删除
|
||||
2. **级联删除** - 删除项目时,关联的对话也被软删除
|
||||
3. **用户隔离** - 通过`user_id`实现数据隔离
|
||||
|
||||
---
|
||||
|
||||
### 2. conversations - 憿寧𤌍撖寡<EFBFBD>銵?
|
||||
### 2. conversations - 项目对话表
|
||||
|
||||
**用途:** 存储项目内的AI对话会话
|
||||
|
||||
#### 銵函<EFBFBD><EFBFBD>?
|
||||
#### 表结构
|
||||
|
||||
| 摮埈挾<EFBFBD>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|
||||
| 字段名 | 数据类型 | 约束 | 说明 |
|
||||
|--------|---------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 撖寡<EFBFBD><EFBFBD>臭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
|
||||
| id | TEXT | PRIMARY KEY | 对话唯一标识(UUID) |
|
||||
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
|
||||
| project_id | TEXT | NULL, FK | 所属项目ID(可选) |
|
||||
| agent_id | TEXT | NOT NULL | 智能体ID |
|
||||
| title | TEXT | NOT NULL | 对话标题 |
|
||||
| model_name | TEXT | NOT NULL, DEFAULT 'deepseek-v3' | 使用的LLM模型 |
|
||||
| message_count | INTEGER | NOT NULL, DEFAULT 0 | 消息数量 |
|
||||
| total_tokens | INTEGER | NOT NULL, DEFAULT 0 | 蝝航恣token<EFBFBD>?|
|
||||
| metadata | JSONB | NULL | <EFBFBD>拙<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?|
|
||||
| total_tokens | INTEGER | NOT NULL, DEFAULT 0 | 累计token数 |
|
||||
| metadata | JSONB | NULL | 扩展元数据 |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
|
||||
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<EFBFBD><EFBFBD>斗𧒄<EFBFBD>?|
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 软删除时间 |
|
||||
|
||||
#### Prisma Model
|
||||
|
||||
@@ -181,28 +181,28 @@ model Conversation {
|
||||
|
||||
#### 业务规则
|
||||
|
||||
1. **憿寧𤌍<EFBFBD>唾<EFBFBD><EFBFBD>舫<EFBFBD>?* - `project_id`<EFBFBD>臭蛹蝛綽<EFBFBD><EFBFBD>舀<EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD>撖寡<EFBFBD>
|
||||
2. **霈⊥㺭<EFBFBD>典<EFBFBD>畾?* - `message_count`<EFBFBD>䈣total_tokens`<EFBFBD>其<EFBFBD>蝏蠘恣嚗屸<EFBFBD>閬<EFBFBD><EFBFBD><EFBFBD>嗆凒<EFBFBD>?
|
||||
1. **项目关联可选** - `project_id`可为空,支持项目内外对话
|
||||
2. **计数器字段** - `message_count`和`total_tokens`用于统计,需要实时更新
|
||||
3. **模型选择** - 支持多种LLM模型(deepseek-v3/gpt-5-pro/claude-4.5等)
|
||||
4. **<EFBFBD>拙<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?* - `metadata`<EFBFBD>其<EFBFBD>摮睃<EFBFBD><EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭<EFBFBD><EFBFBD><EFBFBD>銝𧢲<EFBFBD>蝑?
|
||||
4. **扩展元数据** - `metadata`用于存储配置参数、上下文等
|
||||
|
||||
---
|
||||
|
||||
### 3. messages - 撖寡<EFBFBD>瘨<EFBFBD><EFBFBD>銵?
|
||||
### 3. messages - 对话消息表
|
||||
|
||||
**用途:** 存储对话中的每条消息
|
||||
|
||||
#### 銵函<EFBFBD><EFBFBD>?
|
||||
#### 表结构
|
||||
|
||||
| 摮埈挾<EFBFBD>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|
||||
| 字段名 | 数据类型 | 约束 | 说明 |
|
||||
|--------|---------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 瘨<EFBFBD><EFBFBD><EFBFBD>臭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
|
||||
| id | TEXT | PRIMARY KEY | 消息唯一标识(UUID) |
|
||||
| conversation_id | TEXT | NOT NULL, FK | 所属对话ID |
|
||||
| role | TEXT | NOT NULL | 閫坿𠧧嚗óser/assistant/system嚗?|
|
||||
| role | TEXT | NOT NULL | 角色(user/assistant/system) |
|
||||
| content | TEXT | NOT NULL | 消息内容 |
|
||||
| model | TEXT | NULL | 雿輻鍂<EFBFBD><EFBFBD>芋<EFBFBD>页<EFBFBD>assistant瘨<EFBFBD><EFBFBD>嚗?|
|
||||
| metadata | JSONB | NULL | <EFBFBD>拙<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?|
|
||||
| tokens | INTEGER | NULL | 瘨<EFBFBD><EFBFBD>token<EFBFBD>?|
|
||||
| model | TEXT | NULL | 使用的模型(assistant消息) |
|
||||
| metadata | JSONB | NULL | 扩展元数据 |
|
||||
| tokens | INTEGER | NULL | 消息token数 |
|
||||
| is_pinned | BOOLEAN | NOT NULL, DEFAULT false | 是否置顶 |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
|
||||
|
||||
@@ -234,27 +234,27 @@ model Message {
|
||||
#### 业务规则
|
||||
|
||||
1. **角色类型** - `role`固定为`user`、`assistant`或`system`
|
||||
2. **<EFBFBD>芾粉<EFBFBD>?* - 瘨<><E798A8>銝<EFBFBD><E98A9D>血<EFBFBD>撱箔<E692B1><E7AE94>臭耨<E887AD>對<EFBFBD><E5B08D>芣<EFBFBD>`is_pinned`<EFBFBD>臭耨<EFBFBD>對<EFBFBD>
|
||||
2. **只读性** - 消息一旦创建不可修改(只有`is_pinned`可修改)
|
||||
3. **级联删除** - 删除对话时,消息自动删除
|
||||
4. **置顶功能** - 重要消息可通过`is_pinned`标记
|
||||
|
||||
---
|
||||
|
||||
### 4. general_conversations - <EFBFBD>𡁶鍂撖寡<EFBFBD>銵?
|
||||
### 4. general_conversations - 通用对话表
|
||||
|
||||
**用途:** 存储不绑定项目的通用AI对话
|
||||
|
||||
#### 銵函<EFBFBD><EFBFBD>?
|
||||
#### 表结构
|
||||
|
||||
| 摮埈挾<EFBFBD>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|
||||
| 字段名 | 数据类型 | 约束 | 说明 |
|
||||
|--------|---------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 撖寡<EFBFBD><EFBFBD>臭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
|
||||
| id | TEXT | PRIMARY KEY | 对话唯一标识(UUID) |
|
||||
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
|
||||
| title | TEXT | NOT NULL | 对话标题 |
|
||||
| model_name | TEXT | NOT NULL, DEFAULT 'qwen-long' | 使用的LLM模型 |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
|
||||
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 頧臬<EFBFBD><EFBFBD>斗𧒄<EFBFBD>?|
|
||||
| deleted_at | TIMESTAMPTZ | NULL | 软删除时间 |
|
||||
|
||||
#### Prisma Model
|
||||
|
||||
@@ -282,25 +282,25 @@ model GeneralConversation {
|
||||
|
||||
#### 业务规则
|
||||
|
||||
1. **頧駁<EFBFBD>蝥批笆霂?* - 銝漤<E98A9D>閬<EFBFBD>★<EFBFBD>桀<EFBFBD><E6A180>箄<EFBFBD>雿枏<E99BBF><E69E8F>?
|
||||
2. **敹恍<EFBFBD>笔倮霂?* - <20>其<EFBFBD><E585B6>冽<EFBFBD><E586BD><EFBFBD>葩<EFBFBD>園䔮憸睃<E686B8>敹恍<E695B9><E6818D>䰻霂?
|
||||
1. **轻量级对话** - 不需要项目和智能体关联
|
||||
2. **快速咨询** - 用于用户的临时问题和快速查询
|
||||
3. **独立管理** - 与项目对话分开管理
|
||||
|
||||
---
|
||||
|
||||
### 5. general_messages - <EFBFBD>𡁶鍂撖寡<EFBFBD>瘨<EFBFBD><EFBFBD>銵?
|
||||
### 5. general_messages - 通用对话消息表
|
||||
|
||||
**用途:** 存储通用对话中的每条消息
|
||||
|
||||
#### 銵函<EFBFBD><EFBFBD>?
|
||||
#### 表结构
|
||||
|
||||
| 摮埈挾<EFBFBD>?| <20>唳旿蝐餃<E89D90> | 蝥行<E89DA5> | 霂湔<E99C82> |
|
||||
| 字段名 | 数据类型 | 约束 | 说明 |
|
||||
|--------|---------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 瘨<EFBFBD><EFBFBD><EFBFBD>臭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗㇎UID嚗?|
|
||||
| id | TEXT | PRIMARY KEY | 消息唯一标识(UUID) |
|
||||
| conversation_id | TEXT | NOT NULL, FK | 所属对话ID |
|
||||
| role | TEXT | NOT NULL | 閫坿𠧧嚗óser/assistant/system嚗?|
|
||||
| role | TEXT | NOT NULL | 角色(user/assistant/system) |
|
||||
| content | TEXT | NOT NULL | 消息内容 |
|
||||
| metadata | JSONB | NULL | <EFBFBD>拙<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?|
|
||||
| metadata | JSONB | NULL | 扩展元数据 |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
|
||||
|
||||
#### Prisma Model
|
||||
@@ -326,7 +326,7 @@ model GeneralMessage {
|
||||
|
||||
#### 业务规则
|
||||
|
||||
1. **蝞<EFBFBD><EFBFBD>𤥁挽霈?* - <20>豢<EFBFBD>憿寧𤌍瘨<F0A48C8D><E798A8>嚗<EFBFBD>縧<EFBFBD>劐<EFBFBD>token蝏蠘恣<E8A098>𣬚蔭憿嗅<E686BF><E59785>?
|
||||
1. **简化设计** - 相比项目消息,去掉了token统计和置顶功能
|
||||
2. **级联删除** - 删除对话时,消息自动删除
|
||||
|
||||
---
|
||||
@@ -398,51 +398,51 @@ erDiagram
|
||||
|
||||
### 跨Schema引用
|
||||
|
||||
**憭㚚睸<EFBFBD>喟頂嚗?*
|
||||
- `projects.user_id` <EFBFBD>?`platform_schema.users.id`
|
||||
- `conversations.user_id` <EFBFBD>?`platform_schema.users.id`
|
||||
- `general_conversations.user_id` <EFBFBD>?`platform_schema.users.id`
|
||||
**外键关系:**
|
||||
- `projects.user_id` → `platform_schema.users.id`
|
||||
- `conversations.user_id` → `platform_schema.users.id`
|
||||
- `general_conversations.user_id` → `platform_schema.users.id`
|
||||
|
||||
**霂湔<EFBFBD>嚗?* Prisma<6D>芸𢆡憭<F0A286A1><E686AD>頝沒chema憭㚚睸嚗<E79DB8><E59A97><EFBFBD>其誨<E585B6><E8AAA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>喳<EFBFBD>Schema<EFBFBD>滨<EFBFBD>
|
||||
**说明:** Prisma自动处理跨Schema外键,应用代码无需关心Schema前缀
|
||||
|
||||
---
|
||||
|
||||
## 索引设计
|
||||
|
||||
### 主键索引
|
||||
<EFBFBD><EFBFBD><EFBFBD>㕑”<EFBFBD><EFBFBD>id`摮埈挾<E59F88>芸𢆡<E88AB8>𥕦遣B-tree銝駁睸蝝W<E89D9D><EFBCB7>?
|
||||
所有表的`id`字段自动创建B-tree主键索引。
|
||||
|
||||
### 外键索引
|
||||
|
||||
| 銵典<EFBFBD> | 蝝W<E89D9D>摮埈挾 | <20>券<EFBFBD>?|
|
||||
| 表名 | 索引字段 | 用途 |
|
||||
|------|---------|------|
|
||||
| projects | user_id | <EFBFBD>亥砭<EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厰★<EFBFBD>?|
|
||||
| conversations | user_id | <EFBFBD>亥砭<EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>匧笆霂?|
|
||||
| projects | user_id | 查询用户的所有项目 |
|
||||
| conversations | user_id | 查询用户的所有对话 |
|
||||
| conversations | project_id | 查询项目内的对话 |
|
||||
| conversations | agent_id | 按智能体过滤对话 |
|
||||
| messages | conversation_id | <EFBFBD>亥砭撖寡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>?|
|
||||
| messages | conversation_id | 查询对话的所有消息 |
|
||||
| general_conversations | user_id | 查询用户的通用对话 |
|
||||
| general_messages | conversation_id | <EFBFBD>亥砭撖寡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>?|
|
||||
| general_messages | conversation_id | 查询对话的所有消息 |
|
||||
|
||||
### 时间索引
|
||||
|
||||
| 銵典<EFBFBD> | 蝝W<E89D9D>摮埈挾 | <20>券<EFBFBD>?|
|
||||
| 表名 | 索引字段 | 用途 |
|
||||
|------|---------|------|
|
||||
| projects | created_at | <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD>摨誯★<EFBFBD>?|
|
||||
| projects | deleted_at | 餈<EFBFBD>誘撌脣<EFBFBD><EFBFBD>日★<EFBFBD>?|
|
||||
| conversations | created_at | <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD>摨誩笆霂?|
|
||||
| conversations | updated_at | <EFBFBD>㗇凒<EFBFBD>唳𧒄<EFBFBD>湔<EFBFBD>摨?|
|
||||
| conversations | deleted_at | 餈<EFBFBD>誘撌脣<EFBFBD><EFBFBD>文笆霂?|
|
||||
| messages | created_at | <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD>摨𤩺<EFBFBD><EFBFBD>?|
|
||||
| general_conversations | created_at | <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD>摨誩笆霂?|
|
||||
| general_conversations | updated_at | <EFBFBD>㗇凒<EFBFBD>唳𧒄<EFBFBD>湔<EFBFBD>摨?|
|
||||
| general_messages | created_at | <EFBFBD>㗇𧒄<EFBFBD>湔<EFBFBD>摨𤩺<EFBFBD><EFBFBD>?|
|
||||
| projects | created_at | 按时间排序项目 |
|
||||
| projects | deleted_at | 过滤已删除项目 |
|
||||
| conversations | created_at | 按时间排序对话 |
|
||||
| conversations | updated_at | 按更新时间排序 |
|
||||
| conversations | deleted_at | 过滤已删除对话 |
|
||||
| messages | created_at | 按时间排序消息 |
|
||||
| general_conversations | created_at | 按时间排序对话 |
|
||||
| general_conversations | updated_at | 按更新时间排序 |
|
||||
| general_messages | created_at | 按时间排序消息 |
|
||||
|
||||
### 功能索引
|
||||
|
||||
| 銵典<EFBFBD> | 蝝W<E89D9D>摮埈挾 | <20>券<EFBFBD>?|
|
||||
| 表名 | 索引字段 | 用途 |
|
||||
|------|---------|------|
|
||||
| messages | is_pinned | 敹恍<EFBFBD><EFBFBD>䰻霂Y蔭憿嗆<EFBFBD><EFBFBD>?|
|
||||
| messages | is_pinned | 快速查询置顶消息 |
|
||||
|
||||
---
|
||||
|
||||
@@ -450,18 +450,18 @@ erDiagram
|
||||
|
||||
### 主键类型:TEXT vs UUID
|
||||
|
||||
**敶枏<EFBFBD>摰䂿緵嚗?* TEXT
|
||||
**当前实现:** TEXT
|
||||
```sql
|
||||
id TEXT PRIMARY KEY
|
||||
```
|
||||
|
||||
**UUID<EFBFBD><EFBFBD><EFBFBD>嚗?* Prisma `@default(uuid())`
|
||||
**UUID生成:** Prisma `@default(uuid())`
|
||||
```prisma
|
||||
id String @id @default(uuid())
|
||||
```
|
||||
|
||||
**霂湔<EFBFBD>嚗?*
|
||||
- 摮睃<E691AE><E79D83>澆<EFBFBD>嚗𡁜<E59A97>蝚虫葡敶W<E695B6><EFBCB7><EFBFBD>UID嚗<44><E59A97>`"a6ce8b46-bac6-4284-a9ae-031d636086bc"`嚗?
|
||||
**说明:**
|
||||
- 存储格式:字符串形式的UUID(如`"a6ce8b46-bac6-4284-a9ae-031d636086bc"`)
|
||||
- 优点:与现有代码兼容,无需迁移
|
||||
- 索引性能:与原生UUID类型相当
|
||||
|
||||
@@ -479,46 +479,46 @@ id String @id @default(uuid())
|
||||
- `messages.metadata`
|
||||
- `general_messages.metadata`
|
||||
|
||||
**隡条<EFBFBD>嚗?*
|
||||
- <EFBFBD>菜暑<EFBFBD><EFBFBD>㺭<EFBFBD>桃<EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>舀<EFBFBD>GIN蝝W<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘛餃<EFBFBD>嚗?
|
||||
- <EFBFBD>舀<EFBFBD>JSONB<EFBFBD>滢<EFBFBD>蝚行䰻霂?
|
||||
**优点:**
|
||||
- 灵活的数据结构
|
||||
- 支持GIN索引(按需添加)
|
||||
- 支持JSONB操作符查询
|
||||
|
||||
---
|
||||
|
||||
## 变更历史
|
||||
|
||||
### v1.0 - 2025-11-12 - <EFBFBD>嘥<EFBFBD><EFBFBD><EFBFBD>𧋦 <20>?
|
||||
### v1.0 - 2025-11-12 - 初始版本 ✅
|
||||
|
||||
**<EFBFBD>䀹凒<EFBFBD><EFBFBD>捆嚗?*
|
||||
**变更内容:**
|
||||
1. 从`public` schema迁移到`aia_schema`
|
||||
2. 5銝芾”<EFBFBD>券<EFBFBD>餈<EFBFBD>宏嚗?
|
||||
2. 5个表全部迁移:
|
||||
- projects
|
||||
- conversations
|
||||
- messages
|
||||
- general_conversations
|
||||
- general_messages
|
||||
3. 在Prisma中添加`@@schema("aia_schema")`标签
|
||||
4. <EFBFBD><EFBFBD><EFBFBD>㗇㺭<EFBFBD>?00%摰峕㟲餈<E39FB2>宏
|
||||
4. 所有数据100%完整迁移
|
||||
|
||||
**餈<EFBFBD>宏<EFBFBD>𡁏𧋦嚗?* `docs/09-<EFBFBD>嗆<EFBFBD>摰墧鴌/migration-scripts/003-migrate-aia.sql`
|
||||
**迁移脚本:** `docs/09-架构实施/migration-scripts/003-migrate-aia.sql`
|
||||
|
||||
**撉諹<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <20>?撌脤<E6928C>霂<EFBFBD><E99C82><EFBFBD>蠘<EFBFBD>甇<EFBFBD>虜
|
||||
**验证状态:** ✅ 已验证,功能正常
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [Schema<EFBFBD>𠉛氖<EFBFBD>嗆<EFBFBD>霈曇恣](../../../09-<EFBFBD>嗆<EFBFBD>摰墧鴌/01-Schema<EFBFBD>𠉛氖<EFBFBD>嗆<EFBFBD>霈曇恣嚗?0銝迎<E98A9D>.md)
|
||||
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计(10个).md)
|
||||
- [Schema迁移完成报告](../../../09-架构实施/Schema迁移完成报告.md)
|
||||
- [Prisma配置完成报告](../../../09-架构实施/Prisma配置完成报告.md)
|
||||
- [敹恍<EFBFBD>笔<EFBFBD><EFBFBD>賣<EFBFBD>霂閙𥁒<EFBFBD>𠺖(../../../09-<2D>嗆<EFBFBD>摰墧鴌/敹恍<E695B9>笔<EFBFBD><E7AC94>賣<EFBFBD>霂閙𥁒<E99699>?md)
|
||||
- [快速功能测试报告](../../../09-架构实施/快速功能测试报告.md)
|
||||
|
||||
---
|
||||
|
||||
**文档维护者:** AI助手
|
||||
**最后更新:** 2025-11-12
|
||||
**<EFBFBD><EFBFBD>﹝<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>** <20>?撌脣<E6928C><E884A3>𣂼僎撉諹<E69289>
|
||||
**文档状态:** ✅ 已完成并验证
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user