nex_basse/backend/app/api/v1/endpoints/logs.py

36 lines
1.1 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from typing import Optional
from app.core.db import get_db
from app.models.sys_log import SysLog
from app.schemas.sys_log import SysLogPage
router = APIRouter(prefix="/logs", tags=["logs"])
@router.get("", response_model=SysLogPage)
def list_logs(
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
user_id: Optional[int] = None,
username: Optional[str] = None,
operation_type: Optional[str] = None,
status: Optional[int] = None,
db: Session = Depends(get_db)
):
query = db.query(SysLog)
if username:
query = query.filter(SysLog.username.ilike(f"%{username}%"))
elif user_id:
query = query.filter(SysLog.user_id == user_id)
if operation_type:
query = query.filter(SysLog.operation_type == operation_type)
if status is not None:
query = query.filter(SysLog.status == status)
total = query.count()
items = query.order_by(SysLog.created_at.desc()).offset((page - 1) * page_size).limit(page_size).all()
return {"items": items, "total": total}