from fastapi import APIRouter, Depends, Query, status from sqlalchemy import select from sqlalchemy.orm import Session from app.api.deps import get_current_user from app.core.errors import raise_api_error from app.db.session import get_db from app.models.action import Action from app.models.user import User from app.schemas.action import ActionRead router = APIRouter() @router.get("", response_model=list[ActionRead]) def list_actions( _: User = Depends(get_current_user), db: Session = Depends(get_db), server_id: int | None = Query(default=None), status_value: str | None = Query(default=None, alias="status"), requested_by: int | None = Query(default=None), limit: int = Query(default=50, ge=1, le=200), ) -> list[Action]: query = select(Action) if server_id is not None: query = query.where(Action.server_id == server_id) if status_value is not None: query = query.where(Action.status == status_value) if requested_by is not None: query = query.where(Action.requested_by == requested_by) query = query.order_by(Action.id.desc()).limit(limit) return list(db.scalars(query)) @router.get("/{action_id}", response_model=ActionRead) def get_action( action_id: int, _: User = Depends(get_current_user), db: Session = Depends(get_db), ) -> Action: action = db.get(Action, action_id) if action is None: raise_api_error( status_code=status.HTTP_404_NOT_FOUND, code="action_not_found", message="Requested action was not found.", ) return action