🟡 P1 | POST /knowledge-bases/{id}/folders 创建文件夹 #64

Closed
opened 2026-05-30 16:25:32 +08:00 by wangdl · 2 comments
Owner

背景

iOS 知识点列表 ... 菜单中有「创建文件夹」选项,当前为占位按钮。

需求

新增 endpoint:
POST /knowledge-bases/{id}/folders
Body: { title: 文件夹名称, parentId: 可选的父文件夹ID }
Response: KnowledgeItem (itemType: folder)

关联

KnowledgeItem 已有 parentId 和 itemType 字段,文件夹本质上是一个 itemType=folder 的 KnowledgeItem

## 背景 iOS 知识点列表 ... 菜单中有「创建文件夹」选项,当前为占位按钮。 ## 需求 新增 endpoint: POST /knowledge-bases/{id}/folders Body: { title: 文件夹名称, parentId: 可选的父文件夹ID } Response: KnowledgeItem (itemType: folder) ## 关联 KnowledgeItem 已有 parentId 和 itemType 字段,文件夹本质上是一个 itemType=folder 的 KnowledgeItem
wangdl added this to the H0:iOS 对接阻断修复(P0) milestone 2026-05-30 16:25:32 +08:00
Author
Owner

修复汇报 (2026-06-05)

实现

  • createFolder() — 创建 KnowledgeFolder 的同时创建 KnowledgeItemitemType: "folder"),确保 iOS 知识点列表能展示文件夹
  • 文件夹在 GET /knowledge-items 中与普通知识点一起返回,通过 itemType 区分

状态

完成。

## 修复汇报 (2026-06-05) ### 实现 - **createFolder()** — 创建 `KnowledgeFolder` 的同时创建 `KnowledgeItem`(`itemType: "folder"`),确保 iOS 知识点列表能展示文件夹 - 文件夹在 `GET /knowledge-items` 中与普通知识点一起返回,通过 `itemType` 区分 ### 状态 ✅ 完成。
Author
Owner

Bug 修复 (2026-06-06)

问题 1: 权限校验缺失

createFolder() 未验证调用者是否是知识库 owner,任何人可往任意知识库创建文件夹。

修复: 新增 userId 参数,校验 kb.userId === userId,并验证 parentId 指向的父文件夹属于同一知识库。Controller 透传 @CurrentUser()

问题 2: 删除文件夹时孤儿 KnowledgeItem

deleteFolder() 只软删除 KnowledgeFolder 记录,未删除创建时同步生成的 KnowledgeItemitemType: folder),导致列表中残留已删除的文件夹。

修复: deleteFolder() 新增查找并软删除对应的 KnowledgeItem(按 knowledgeBaseId + title + itemType=folder 匹配)。

状态

已修复。

## Bug 修复 (2026-06-06) ### 问题 1: 权限校验缺失 `createFolder()` 未验证调用者是否是知识库 owner,任何人可往任意知识库创建文件夹。 **修复**: 新增 `userId` 参数,校验 `kb.userId === userId`,并验证 `parentId` 指向的父文件夹属于同一知识库。Controller 透传 `@CurrentUser()`。 ### 问题 2: 删除文件夹时孤儿 KnowledgeItem `deleteFolder()` 只软删除 `KnowledgeFolder` 记录,未删除创建时同步生成的 `KnowledgeItem`(`itemType: folder`),导致列表中残留已删除的文件夹。 **修复**: `deleteFolder()` 新增查找并软删除对应的 KnowledgeItem(按 `knowledgeBaseId + title + itemType=folder` 匹配)。 ### 状态 ✅ 已修复。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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