回收站,软删除(三天自动清空),以及默认链接三十分钟失效

This commit is contained in:
amb
2026-09-02 18:59:42 +08:00
parent bfb7a1a8a2
commit ff3e2a7273
16 changed files with 797 additions and 38 deletions
+4 -3
View File
@@ -87,9 +87,10 @@ def regenerate_token(
) -> KbTokenResponse:
svc = KnowledgeBaseService(db)
kb, token = svc.regenerate_token(kb_id, user)
# 重新生成 = 全新链接,有效期重置为长期
svc.set_expiry(kb_id, user, None)
return KbTokenResponse(token=token, ai_url=f"/k/{token}", token_hint=kb.token_hint)
return KbTokenResponse(
token=token, ai_url=f"/k/{token}", token_hint=kb.token_hint,
expires_at=kb.token_expires_at, is_expired=False,
)
@router.post("/{kb_id}/enable", response_model=KbResponse)
+87
View File
@@ -0,0 +1,87 @@
"""回收站 API 路由。"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.api.deps import get_current_user, get_db
from app.models.user import User
from app.services.recycle_bin_service import RecycleBinService
router = APIRouter(prefix="/recycle-bin", tags=["recycle-bin"])
@router.get("")
def list_recycle_bin(
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> dict:
"""回收站内容列表。"""
return RecycleBinService(db).list_items(user)
@router.post("/documents/{doc_id}/restore", status_code=204)
def restore_document(
doc_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
RecycleBinService(db).restore_document(doc_id, user)
@router.delete("/documents/{doc_id}", status_code=204)
def purge_document(
doc_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
"""彻底删除单个文档(文件+记录)。"""
RecycleBinService(db).purge_document(doc_id, user)
@router.post("/categories/{cat_id}/restore", status_code=204)
def restore_category(
cat_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
"""恢复目录(连同同批删除的子目录与文档)。"""
RecycleBinService(db).restore_category(cat_id, user)
@router.delete("/categories/{cat_id}", status_code=204)
def purge_category(
cat_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
"""彻底删除目录(连同同批内容)。"""
RecycleBinService(db).purge_category(cat_id, user)
@router.post("/knowledge-bases/{kb_id}/restore", status_code=204)
def restore_kb(
kb_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
RecycleBinService(db).restore_kb(kb_id, user)
@router.delete("/knowledge-bases/{kb_id}", status_code=204)
def purge_kb(
kb_id: str,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> None:
"""彻底删除知识库(全部文件+记录)。"""
RecycleBinService(db).purge_kb(kb_id, user)
@router.post("/purge-expired")
def purge_expired(
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
) -> dict:
"""手动触发:彻底清理所有已过保留期的内容。"""
count = RecycleBinService(db).purge_expired()
return {"purged": count}