You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
2.1 KiB

from fastapi import APIRouter, Depends
from app.api.dependencies import get_backend_service
from app.schemas.backend import (
BackendCheckResponse,
BackendListResponse,
BackendMutationResponse,
BackendSummary,
CreateBackendRequest,
CreateBackendResponse,
)
from app.services.backend_service import BackendService
router = APIRouter()
@router.get("", response_model=BackendListResponse)
async def list_backends(
service: BackendService = Depends(get_backend_service),
) -> BackendListResponse:
items = await service.list_backends()
return BackendListResponse(
items=[BackendSummary.model_validate(item, from_attributes=True) for item in items]
)
@router.post("", response_model=CreateBackendResponse)
async def create_backend(
payload: CreateBackendRequest,
service: BackendService = Depends(get_backend_service),
) -> CreateBackendResponse:
backend = await service.create_backend(
name=payload.name,
backend_type=payload.type,
stability_class=payload.stability_class,
read_priority=payload.read_priority,
write_priority=payload.write_priority,
config=payload.config,
)
return CreateBackendResponse(backend=BackendSummary.model_validate(backend, from_attributes=True))
@router.post("/{backend_id}/check", response_model=BackendCheckResponse)
async def check_backend(
backend_id: str,
service: BackendService = Depends(get_backend_service),
) -> BackendCheckResponse:
backend, status, detail = await service.check_backend(backend_id)
return BackendCheckResponse(
backend_id=backend.id,
status=status,
checked_at=backend.last_health_checked_at,
detail=detail,
)
@router.post("/{backend_id}/disable", response_model=BackendMutationResponse)
async def disable_backend(
backend_id: str,
service: BackendService = Depends(get_backend_service),
) -> BackendMutationResponse:
backend = await service.disable_backend(backend_id)
return BackendMutationResponse(backend=BackendSummary.model_validate(backend, from_attributes=True))