from datetime import datetime from fastapi import APIRouter, Depends, Query from pydantic import BaseModel from sqlalchemy.orm import Session as DBSession from sqlalchemy import desc from app.db.database import get_db from app.db.models import ApiLog router = APIRouter(prefix="/logs", tags=["logs"]) class LogResponse(BaseModel): id: int session_id: str | None model: str request_json: str response_text: str | None error: str | None latency_ms: float | None created_at: datetime class Config: from_attributes = True @router.get("", response_model=list[LogResponse]) def list_logs( session_id: str | None = Query(None), status: str | None = Query(None, description="'ok' または 'error'"), limit: int = Query(100, le=500), offset: int = Query(0), db: DBSession = Depends(get_db), ): q = db.query(ApiLog) if session_id: q = q.filter(ApiLog.session_id == session_id) if status == "ok": q = q.filter(ApiLog.error.is_(None)) elif status == "error": q = q.filter(ApiLog.error.isnot(None)) return q.order_by(desc(ApiLog.created_at)).offset(offset).limit(limit).all() @router.delete("/{log_id}", status_code=204) def delete_log(log_id: int, db: DBSession = Depends(get_db)): log = db.get(ApiLog, log_id) if log: db.delete(log) db.commit()