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.
62 lines
2.2 KiB
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")
|