44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""Workflow routes."""
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.api.schemas.workflow import WorkflowListResponse, WorkflowStatusResponse
|
|
from app.application.services.workflow_service import WorkflowService
|
|
from app.domain.enums import OrderStatus
|
|
from app.infra.db.session import get_db_session
|
|
|
|
router = APIRouter(prefix="/workflows", tags=["workflows"])
|
|
workflow_service = WorkflowService()
|
|
|
|
|
|
@router.get("", response_model=WorkflowListResponse)
|
|
async def list_workflows(
|
|
page: int = Query(default=1, ge=1),
|
|
limit: int = Query(default=20, ge=1, le=100),
|
|
query: str | None = Query(default=None, min_length=1),
|
|
status_filter: OrderStatus | None = Query(default=None, alias="status"),
|
|
order_id: int | None = Query(default=None, ge=1),
|
|
session: AsyncSession = Depends(get_db_session),
|
|
) -> WorkflowListResponse:
|
|
"""Fetch recent workflow runs for workflow lookup pages."""
|
|
|
|
return await workflow_service.list_workflows(
|
|
session,
|
|
page=page,
|
|
limit=limit,
|
|
query=query,
|
|
status_filter=status_filter,
|
|
order_id=order_id,
|
|
)
|
|
|
|
|
|
@router.get("/{order_id}", response_model=WorkflowStatusResponse)
|
|
async def get_workflow_status(
|
|
order_id: int,
|
|
session: AsyncSession = Depends(get_db_session),
|
|
) -> WorkflowStatusResponse:
|
|
"""Fetch persisted workflow status for an order."""
|
|
|
|
return await workflow_service.get_workflow_status(session, order_id)
|