You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ErrorDetecting/backend/app/routers/sys_exec_logs.py

62 lines
2.2 KiB

from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, delete, func
from ..db import get_db
from ..models.sys_exec_logs import SysExecLog
from ..deps.auth import get_current_user
from pydantic import BaseModel
from datetime import datetime
router = APIRouter()
class SysExecLogCreate(BaseModel):
user_id: int
description: str
@router.get("/sys-exec-logs")
async def list_sys_exec_logs(
user=Depends(get_current_user),
db: AsyncSession = Depends(get_db),
page: int = Query(1, ge=1),
size: int = Query(10, ge=1, le=100),
):
try:
stmt = select(SysExecLog).order_by(SysExecLog.operation_time.desc()).offset((page - 1) * size).limit(size)
count_stmt = select(func.count(SysExecLog.operation_id))
rows = (await db.execute(stmt)).scalars().all()
total = (await db.execute(count_stmt)).scalar() or 0
return {
"items": [r.to_dict() for r in rows],
"total": int(total)
}
except Exception as e:
print(f"Error listing sys exec logs: {e}")
raise HTTPException(status_code=500, detail="server_error")
@router.post("/sys-exec-logs")
async def create_sys_exec_log(req: SysExecLogCreate, user=Depends(get_current_user), db: AsyncSession = Depends(get_db)):
try:
row = SysExecLog(
user_id=req.user_id,
description=req.description
)
db.add(row)
await db.commit()
return {"ok": True, "operation_id": str(row.operation_id)}
except Exception as e:
print(f"Error creating sys exec log: {e}")
raise HTTPException(status_code=500, detail="server_error")
@router.delete("/sys-exec-logs/{operation_id}")
async def delete_sys_exec_log(operation_id: str, user=Depends(get_current_user), db: AsyncSession = Depends(get_db)):
try:
# Note: operation_id is UUID
await db.execute(delete(SysExecLog).where(SysExecLog.operation_id == operation_id))
await db.commit()
return {"ok": True}
except Exception as e:
print(f"Error deleting sys exec log: {e}")
raise HTTPException(status_code=500, detail="server_error")