36 lines
1.1 KiB
Python
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}
|