fix: allow direct knowledge deletion
This commit is contained in:
@@ -192,12 +192,13 @@ def delete_knowledge(
|
||||
) -> dict:
|
||||
_require_super_admin(current_admin)
|
||||
knowledge = _get_knowledge(db, knowledge_id)
|
||||
if knowledge.lifecycle_status != "archived" or knowledge.status != 0:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="物理删除前必须先关闭并归档知识库",
|
||||
)
|
||||
# 清理早期按用户授权口径留下的历史关联,避免外键阻止知识库删除。
|
||||
# 删除操作本身会立即停止开放并清理正式内容,不再要求管理员先执行“关闭、归档”两步。
|
||||
knowledge.status = 0
|
||||
knowledge.lifecycle_status = "archived"
|
||||
db.add(knowledge)
|
||||
db.flush()
|
||||
|
||||
# 清理按用户授权口径留下的历史关联,避免外键阻止知识库删除。
|
||||
permissions = db.scalars(
|
||||
select(UserKnowledgePermission).where(UserKnowledgePermission.knowledge_id == knowledge.id)
|
||||
).all()
|
||||
@@ -212,9 +213,16 @@ def delete_knowledge(
|
||||
db.flush()
|
||||
for row in db.scalars(select(KnowledgeSourceSnapshot).where(KnowledgeSourceSnapshot.knowledge_id == knowledge.id)).all():
|
||||
db.delete(row)
|
||||
db.delete(knowledge)
|
||||
OperationLogService.write(db, admin_id=current_admin.id, module="knowledge", action="delete", target_id=knowledge.id)
|
||||
db.commit()
|
||||
db.delete(knowledge)
|
||||
try:
|
||||
db.commit()
|
||||
except IntegrityError as exc:
|
||||
db.rollback()
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail="知识库仍有关联数据,删除未执行,请刷新后重试",
|
||||
) from exc
|
||||
return api_success()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user