Feat: Implement token tracking, soft delete, and Admin UI improvements

This commit is contained in:
2026-02-10 01:00:26 +08:00
parent 6924e86b8d
commit 968eb173dd
14 changed files with 1763 additions and 180 deletions

View File

@@ -26,6 +26,9 @@ class ModuleResponse(BaseModel):
is_active: bool
created_at: datetime
last_rotated_at: datetime
ingress_tokens: int
egress_tokens: int
total_tokens: int
class Config:
from_attributes = True
@@ -55,10 +58,14 @@ def create_module(
@router.get("/modules", response_model=List[ModuleResponse])
def get_modules(
include_archived: bool = False,
db: Session = Depends(get_db),
current_user: str = Depends(get_current_user)
):
return db.query(Module).all()
query = db.query(Module)
if not include_archived:
query = query.filter(Module.is_active == True)
return query.all()
@router.post("/modules/{module_id}/rotate", response_model=ModuleResponse)
def rotate_module_key(
@@ -79,12 +86,35 @@ def rotate_module_key(
@router.delete("/modules/{module_id}")
def delete_module(
module_id: int,
hard_delete: bool = False,
db: Session = Depends(get_db),
current_user: str = Depends(get_current_user)
):
db_module = db.query(Module).filter(Module.id == module_id).first()
if not db_module:
raise HTTPException(status_code=404, detail="Module not found")
db.delete(db_module)
if hard_delete:
db.delete(db_module)
message = "Module permanently deleted"
else:
db_module.is_active = False
message = "Module archived"
db.commit()
return {"status": "success"}
return {"status": "success", "message": message}
@router.post("/modules/{module_id}/restore", response_model=ModuleResponse)
def restore_module(
module_id: int,
db: Session = Depends(get_db),
current_user: str = Depends(get_current_user)
):
db_module = db.query(Module).filter(Module.id == module_id).first()
if not db_module:
raise HTTPException(status_code=404, detail="Module not found")
db_module.is_active = True
db.commit()
db.refresh(db_module)
return db_module