|
6 | 6 | from fastapi.responses import JSONResponse, Response |
7 | 7 | from sqlalchemy.ext.asyncio import AsyncSession |
8 | 8 |
|
9 | | -from api.dependencies import create_provider_use_case_factory, get_request_context |
| 9 | +from api.dependencies import create_provider_use_case_factory, delete_provider_use_case_factory, get_request_context |
10 | 10 | from api.domain.model import InconsistentModelMaxContextLengthError, InconsistentModelVectorSizeError |
11 | 11 | from api.domain.provider import InvalidProviderTypeError, ProviderNotReachableError |
12 | | -from api.domain.provider.errors import ProviderAlreadyExistsError |
| 12 | +from api.domain.provider.errors import ProviderAlreadyExistsError, ProviderNotFoundError |
13 | 13 | from api.domain.router.errors import RouterNotFoundError |
14 | 14 | from api.domain.userinfo.errors import UserIsNotAdminError |
15 | 15 | from api.helpers.models import ModelRegistry |
|
24 | 24 | InvalidProviderTypeHTTPException, |
25 | 25 | NotAdminUserHTTPException, |
26 | 26 | ProviderAlreadyExistsHTTPException, |
| 27 | + ProviderNotFoundHTTPException, |
27 | 28 | ProviderNotReachableHTTPException, |
28 | 29 | RouterNotFoundHTTPException, |
29 | 30 | ) |
30 | 31 | from api.infrastructure.fastapi.schemas.providers import CreateProvider, CreateProviderResponse, Provider, Providers, UpdateProvider |
31 | | -from api.use_cases.admin.providers import CreateProviderCommand, CreateProviderUseCase, CreateProviderUseCaseSuccess |
| 32 | +from api.use_cases.admin.providers import ( |
| 33 | + CreateProviderCommand, |
| 34 | + CreateProviderUseCase, |
| 35 | + CreateProviderUseCaseSuccess, |
| 36 | + DeleteProviderCommand, |
| 37 | + DeleteProviderUseCase, |
| 38 | + DeleteProviderUseCaseSuccess, |
| 39 | +) |
32 | 40 | from api.utils.dependencies import get_model_registry, get_postgres_session |
33 | 41 | from api.utils.variables import EndpointRoute |
34 | 42 |
|
@@ -107,19 +115,39 @@ async def create_provider( |
107 | 115 |
|
108 | 116 |
|
109 | 117 | @router.delete( |
110 | | - path=EndpointRoute.ADMIN_PROVIDERS + "/{provider}", |
| 118 | + path=EndpointRoute.ADMIN_PROVIDERS + "/{provider_id}", |
111 | 119 | dependencies=[Security(dependency=get_current_key)], |
112 | | - status_code=204, |
| 120 | + status_code=200, |
113 | 121 | ) |
114 | 122 | async def delete_provider( |
115 | | - request: Request, |
116 | | - provider: int = Path(description="The ID of the provider to delete."), |
117 | | - postgres_session: AsyncSession = Depends(get_postgres_session), |
118 | | - model_registry: ModelRegistry = Depends(get_model_registry), |
119 | | -) -> Response: |
120 | | - await model_registry.delete_provider(provider_id=provider, postgres_session=postgres_session) |
| 123 | + provider_id: int = Path(description="The ID of the provider to delete."), |
| 124 | + delete_provider_use_case: DeleteProviderUseCase = Depends(delete_provider_use_case_factory), |
| 125 | + request_context: ContextVar[RequestContext] = Depends(get_request_context), |
| 126 | +) -> Provider: |
| 127 | + command = DeleteProviderCommand( |
| 128 | + user_id=request_context.get().user_id, |
| 129 | + provider_id=provider_id, |
| 130 | + ) |
| 131 | + try: |
| 132 | + result = await delete_provider_use_case.execute(command) |
| 133 | + except Exception as e: |
| 134 | + logger.exception( |
| 135 | + "Unexpected error while executing delete_provider use case", |
| 136 | + extra={ |
| 137 | + "user_id": command.user_id, |
| 138 | + "provider_id": command.provider_id, |
| 139 | + "error_type": type(e).__name__, |
| 140 | + }, |
| 141 | + ) |
| 142 | + raise InternalServerHTTPException() |
121 | 143 |
|
122 | | - return Response(status_code=204) |
| 144 | + match result: |
| 145 | + case DeleteProviderUseCaseSuccess(deleted_router): |
| 146 | + return Provider.model_validate(deleted_router, from_attributes=True) |
| 147 | + case ProviderNotFoundError(provider_id=not_found_id): |
| 148 | + raise ProviderNotFoundHTTPException(not_found_id) |
| 149 | + case UserIsNotAdminError(): |
| 150 | + raise NotAdminUserHTTPException() |
123 | 151 |
|
124 | 152 |
|
125 | 153 | @router.patch( |
|
0 commit comments