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))