M7-01 P0 | Prisma ChatSession 新增 scopeType scopeId parentKnowledgeBaseId #79

Closed
opened 2026-06-06 16:21:46 +08:00 by wangdl · 1 comment
Owner

完成

Prisma Schema 变更 (prisma/schema.prisma)

ChatSession — 新增 10 个字段 + 4 个索引:

  • scopeType String @default("knowledge_base")
  • scopeId String?
  • parentKnowledgeBaseId String?
  • createdFrom String @default("legacy_migration")
  • isPinned Boolean @default(false)
  • isArchived Boolean @default(false)
  • isDeleted Boolean @default(false)
  • modelMode String @default("normal")
  • modelId String?
  • lastMessageAt DateTime?
  • 索引: [userId, scopeType, scopeId], [userId, parentKnowledgeBaseId], [userId, isDeleted], [lastMessageAt]
  • 保留旧字段 knowledgeBaseId 以便迁移

ChatMessage — 新增:

  • scopeSnapshot Json? — 记录消息创建时的 scope 快照

ChatCitation — 新增:

  • lineStart Int?
  • lineEnd Int?
  • @@index([sourceId])

Service 层变更 (rag-chat.service.ts)

  • createSession — 接受 CreateSessionParams (scopeType + scopeId + parentKnowledgeBaseId + createdFrom)
  • listSessions — 支持 scopeType/scopeId/parentKnowledgeBaseId 过滤
  • sendMessage / sendMessageStream — 存储 scopeSnapshot, 使用 loadContextByScope
  • loadContextByScope — 按 scope 类型检索 (material→sourceRef, item→精确id, kb→全库)
  • updateSession — PATCH 端点 (title/isPinned/isArchived/modelMode),scope 字段不可修改
  • deleteSession — 软删除 (isDeleted=true)

Controller 变更 (rag-chat.controller.ts)

  • POST /sessions — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom
  • GET /sessions — 新增 scopeType/scopeId/parentKnowledgeBaseId query params
  • PATCH /sessions/:id — 新端点
  • DELETE /sessions/:id — 软删除

注意

  • Prisma migration 未执行(本地无数据库),需要后续在服务器上运行: npx prisma migrate dev --name add_chat_scope_fields
  • 同时关闭: #92, #93, #72, #73, #94, #95, #96, #81, #75, #74
## 完成 ✅ ### Prisma Schema 变更 (`prisma/schema.prisma`) **ChatSession** — 新增 10 个字段 + 4 个索引: - `scopeType` String @default("knowledge_base") - `scopeId` String? - `parentKnowledgeBaseId` String? - `createdFrom` String @default("legacy_migration") - `isPinned` Boolean @default(false) - `isArchived` Boolean @default(false) - `isDeleted` Boolean @default(false) - `modelMode` String @default("normal") - `modelId` String? - `lastMessageAt` DateTime? - 索引: [userId, scopeType, scopeId], [userId, parentKnowledgeBaseId], [userId, isDeleted], [lastMessageAt] - 保留旧字段 knowledgeBaseId 以便迁移 **ChatMessage** — 新增: - `scopeSnapshot` Json? — 记录消息创建时的 scope 快照 **ChatCitation** — 新增: - `lineStart` Int? - `lineEnd` Int? - @@index([sourceId]) ### Service 层变更 (`rag-chat.service.ts`) - `createSession` — 接受 `CreateSessionParams` (scopeType + scopeId + parentKnowledgeBaseId + createdFrom) - `listSessions` — 支持 scopeType/scopeId/parentKnowledgeBaseId 过滤 - `sendMessage` / `sendMessageStream` — 存储 scopeSnapshot, 使用 loadContextByScope - `loadContextByScope` — 按 scope 类型检索 (material→sourceRef, item→精确id, kb→全库) - `updateSession` — PATCH 端点 (title/isPinned/isArchived/modelMode),scope 字段不可修改 - `deleteSession` — 软删除 (isDeleted=true) ### Controller 变更 (`rag-chat.controller.ts`) - `POST /sessions` — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom - `GET /sessions` — 新增 scopeType/scopeId/parentKnowledgeBaseId query params - `PATCH /sessions/:id` — 新端点 - `DELETE /sessions/:id` — 软删除 ### 注意 - Prisma migration 未执行(本地无数据库),需要后续在服务器上运行: `npx prisma migrate dev --name add_chat_scope_fields` - 同时关闭: #92, #93, #72, #73, #94, #95, #96, #81, #75, #74
wangdl added this to the M7:ChatScope 会话系统 — 学习对象绑定的上下文会话 milestone 2026-06-06 16:21:46 +08:00
Author
Owner

完成情况

交付物

1. Prisma Schema (prisma/schema.prisma)

ChatSession 模型新增 10 个字段:

scopeType             String   @default("knowledge_base") @db.VarChar(32)
scopeId               String?
parentKnowledgeBaseId String?
createdFrom           String   @default("legacy_migration") @db.VarChar(32)
isPinned              Boolean  @default(false)
isArchived            Boolean  @default(false)
isDeleted             Boolean  @default(false)
modelMode             String   @default("normal") @db.VarChar(16)
modelId               String?  @db.VarChar(64)
lastMessageAt         DateTime?

新增 4 个索引:

  • @@index([userId, scopeType, scopeId]) — open-or-create 核心查询
  • @@index([userId, parentKnowledgeBaseId]) — 知识库内会话列表
  • @@index([userId, isDeleted]) — 排除已删除
  • @@index([lastMessageAt]) — 时间排序

保留旧字段 knowledgeBaseIdknowledgeItemIds,迁移后移除。

2. Service 层 (src/modules/rag-chat/rag-chat.service.ts)

  • createSession(userId, CreateSessionParams) — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom,校验 scopeType 合法性和 scopeId 必填性
  • deriveParentKbId() — 从 scope 推导 parentKnowledgeBaseId
  • listSessions() — 支持 scopeType+scopeId 精确过滤、parentKnowledgeBaseId 知识库过滤、分页

3. Controller 层 (src/modules/rag-chat/rag-chat.controller.ts)

  • POST /sessions — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom/title
  • GET /sessions — 新增 scopeType/scopeId/parentKnowledgeBaseId/page/limit query params
  • PATCH /sessions/:id — 新端点,更新 title/isPinned/isArchived/modelMode/modelId
  • DELETE /sessions/:id — 改为软删除 (isDeleted=true)

注意事项

  • Prisma migration 未执行(本地无 MySQL),需要在服务器上运行: npx prisma migrate dev --name add_chat_scope_fields
  • 旧数据回填脚本见 #78 M7-10
  • 同时完成了 #92 #93 #72 #73 #94 #95 #96 的 schema 变更

涉及文件

文件 变更类型
prisma/schema.prisma ChatSession +10 字段/+4 索引, ChatMessage +1, ChatCitation +2/+1 索引
src/modules/rag-chat/rag-chat.service.ts createSession/listSessions/updateSession/deleteSession 重构
src/modules/rag-chat/rag-chat.controller.ts DTO 更新 + PATCH 端点新增
## 完成情况 ### 交付物 **1. Prisma Schema** (`prisma/schema.prisma`) ChatSession 模型新增 10 个字段: ```prisma scopeType String @default("knowledge_base") @db.VarChar(32) scopeId String? parentKnowledgeBaseId String? createdFrom String @default("legacy_migration") @db.VarChar(32) isPinned Boolean @default(false) isArchived Boolean @default(false) isDeleted Boolean @default(false) modelMode String @default("normal") @db.VarChar(16) modelId String? @db.VarChar(64) lastMessageAt DateTime? ``` 新增 4 个索引: - `@@index([userId, scopeType, scopeId])` — open-or-create 核心查询 - `@@index([userId, parentKnowledgeBaseId])` — 知识库内会话列表 - `@@index([userId, isDeleted])` — 排除已删除 - `@@index([lastMessageAt])` — 时间排序 保留旧字段 `knowledgeBaseId` 和 `knowledgeItemIds`,迁移后移除。 **2. Service 层** (`src/modules/rag-chat/rag-chat.service.ts`) - `createSession(userId, CreateSessionParams)` — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom,校验 scopeType 合法性和 scopeId 必填性 - `deriveParentKbId()` — 从 scope 推导 parentKnowledgeBaseId - `listSessions()` — 支持 scopeType+scopeId 精确过滤、parentKnowledgeBaseId 知识库过滤、分页 **3. Controller 层** (`src/modules/rag-chat/rag-chat.controller.ts`) - `POST /sessions` — 接受 scopeType/scopeId/parentKnowledgeBaseId/createdFrom/title - `GET /sessions` — 新增 scopeType/scopeId/parentKnowledgeBaseId/page/limit query params - `PATCH /sessions/:id` — 新端点,更新 title/isPinned/isArchived/modelMode/modelId - `DELETE /sessions/:id` — 改为软删除 (isDeleted=true) ### 注意事项 - Prisma migration 未执行(本地无 MySQL),需要在服务器上运行: `npx prisma migrate dev --name add_chat_scope_fields` - 旧数据回填脚本见 #78 M7-10 - 同时完成了 #92 #93 #72 #73 #94 #95 #96 的 schema 变更 ### 涉及文件 | 文件 | 变更类型 | |------|---------| | prisma/schema.prisma | ChatSession +10 字段/+4 索引, ChatMessage +1, ChatCitation +2/+1 索引 | | src/modules/rag-chat/rag-chat.service.ts | createSession/listSessions/updateSession/deleteSession 重构 | | src/modules/rag-chat/rag-chat.controller.ts | DTO 更新 + PATCH 端点新增 |
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#79
No description provided.