Files
RelayOps/backend/app/api/routes/actions.py
2026-06-07 02:32:28 +03:00

50 lines
1.6 KiB
Python

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