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}