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