6
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""知识库服务:CRUD + Token 管理。"""
|
||||
"""知识库服务:CRUD + Token 管理 + 默认目录树。"""
|
||||
|
||||
from app.core.errors import NotFoundError, PermissionDeniedError
|
||||
from app.models.document_category import DocumentCategory
|
||||
from app.models.knowledge_base import KnowledgeBase
|
||||
from app.models.user import User
|
||||
from app.repositories.kb_repo import KnowledgeBaseRepository
|
||||
@@ -18,6 +19,7 @@ class KnowledgeBaseService:
|
||||
"""创建知识库。返回 (kb, full_token)。
|
||||
|
||||
full_token 仅此一次返回,用于构建完整 AI URL。
|
||||
自动创建默认目录树结构。
|
||||
"""
|
||||
token, token_hash, token_encrypted, token_hint = self._token_svc.create_token_pair()
|
||||
kb = self._kb_repo.create(
|
||||
@@ -28,9 +30,46 @@ class KnowledgeBaseService:
|
||||
token_encrypted=token_encrypted,
|
||||
token_hint=token_hint,
|
||||
)
|
||||
self._seed_default_categories(kb.id)
|
||||
self._session.commit()
|
||||
return kb, token
|
||||
|
||||
def _seed_default_categories(self, kb_id: str) -> None:
|
||||
"""创建默认目录树结构。"""
|
||||
default_tree = [
|
||||
("01 公司层", ["公司基本信息", "经营理念", "四大价值", "A/M/B三态"]),
|
||||
("02 战略层", ["公司战略", "客户战略", "AI战略", "产品战略"]),
|
||||
("03 部门层", ["企划", "技术", "交付", "市场"]),
|
||||
("04 岗位/AI角色", []),
|
||||
("05 业务知识", ["价值创造", "价值传递", "价值交付", "价值支持"]),
|
||||
("06 资产库", ["文案", "SOP", "模板", "案例", "Prompt"]),
|
||||
]
|
||||
|
||||
for i, (folder_name, children) in enumerate(default_tree):
|
||||
# 创建顶层文件夹
|
||||
folder = DocumentCategory(
|
||||
knowledge_base_id=kb_id,
|
||||
parent_id=None,
|
||||
name=folder_name,
|
||||
path=f"/{folder_name}/",
|
||||
is_folder=True,
|
||||
sort_order=i,
|
||||
)
|
||||
self._session.add(folder)
|
||||
self._session.flush()
|
||||
|
||||
# 创建子分类
|
||||
for j, child_name in enumerate(children):
|
||||
child = DocumentCategory(
|
||||
knowledge_base_id=kb_id,
|
||||
parent_id=folder.id,
|
||||
name=child_name,
|
||||
path=f"/{folder_name}/{child_name}/",
|
||||
is_folder=False,
|
||||
sort_order=j,
|
||||
)
|
||||
self._session.add(child)
|
||||
|
||||
def get_or_404(self, kb_id: str, user: User) -> KnowledgeBase:
|
||||
"""获取知识库,校验所有权。不存在或无权 → 404。"""
|
||||
kb = self._kb_repo.get_by_id(kb_id)
|
||||
|
||||
Reference in New Issue
Block a user