50 lines
1.6 KiB
Python
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
|