from fastapi import APIRouter, Body, Depends, HTTPException from app.core.security import admin_auth from app.repositories import log_repository from app.schemas.log import DownloadLogClearRequest, LogDeleteRequest router = APIRouter(tags=["admin-logs"]) @router.get("/admin/report/list") def admin_get_report_log(auth=Depends(admin_auth)): return {"list": log_repository.list_upgrade_logs()} @router.post("/admin/report/delete") def admin_delete_report_log(body: LogDeleteRequest, auth=Depends(admin_auth)): log_id = int(body.id or 0) if log_id < 1: raise HTTPException(status_code=400, detail="日志 ID 无效") deleted = log_repository.delete_upgrade_log(log_id) if deleted != 1: raise HTTPException(status_code=404, detail="升级日志不存在") return {"msg": "升级日志已删除", "deleted": deleted} @router.post("/admin/report/clear") def admin_clear_report_logs(auth=Depends(admin_auth)): deleted = log_repository.clear_upgrade_logs() return {"msg": "升级日志已清空", "deleted": deleted} @router.get("/admin/download-log/list") def admin_download_log_list(app_id: str = "", limit: int = 300, auth=Depends(admin_auth)): limit = max(1, min(limit, 1000)) return {"list": log_repository.list_download_logs(app_id, limit)} @router.post("/admin/download-log/delete") def admin_download_log_delete(body: LogDeleteRequest, auth=Depends(admin_auth)): log_id = int(body.id or 0) if log_id < 1: raise HTTPException(status_code=400, detail="日志 ID 无效") deleted = log_repository.delete_download_log(log_id) if deleted != 1: raise HTTPException(status_code=404, detail="下载日志不存在") return {"msg": "下载日志已删除", "deleted": deleted} @router.post("/admin/download-log/clear") def admin_download_log_clear(body: DownloadLogClearRequest | None = Body(default=None), auth=Depends(admin_auth)): app_id = (body.app_id if body else "").strip() deleted = log_repository.clear_download_logs(app_id) return {"msg": "下载日志已清空", "deleted": deleted} @router.get("/admin/audit-log/list") def admin_audit_log_list(limit: int = 300, auth=Depends(admin_auth)): return {"list": log_repository.list_audit_logs(max(1, min(limit, 1000)))} @router.post("/admin/audit-log/delete") def admin_audit_log_delete(body: LogDeleteRequest, auth=Depends(admin_auth)): log_id = int(body.id or 0) if log_id < 1: raise HTTPException(status_code=400, detail="日志 ID 无效") deleted = log_repository.delete_audit_log(log_id) if deleted != 1: raise HTTPException(status_code=404, detail="审计日志不存在") return {"msg": "审计日志已删除", "deleted": deleted} @router.post("/admin/audit-log/clear") def admin_audit_log_clear(auth=Depends(admin_auth)): deleted = log_repository.clear_audit_logs() return {"msg": "审计日志已清空", "deleted": deleted}