use axum::Json; use axum::extract::{Path, State}; use api_types::{ProviderConfigRequest, ProviderConfigResponse}; use application::providers::UpsertProviderCommand; use domain::DomainError; use crate::errors::AppError; use crate::extractors::AdminUser; use crate::state::AppState; pub async fn list_providers( State(state): State, AdminUser(_user): AdminUser, ) -> Result>, AppError> { let providers = state.provider_config_query.get_all().await?; Ok(Json( providers .into_iter() .map(ProviderConfigResponse::from) .collect(), )) } pub async fn get_provider( State(state): State, AdminUser(_user): AdminUser, Path(id): Path, ) -> Result, AppError> { let provider = state .provider_config_query .get_by_id(&id) .await? .ok_or_else(|| AppError(DomainError::NotFound(format!("Provider {id} not found"))))?; Ok(Json(ProviderConfigResponse::from(provider))) } pub async fn upsert_provider( State(state): State, AdminUser(_user): AdminUser, Path(id): Path, Json(req): Json, ) -> Result, AppError> { let cmd = UpsertProviderCommand { id, provider_type: req.provider_type, config: req.config, enabled: req.enabled, }; application::providers::upsert::execute(&state.provider_deps, cmd).await?; Ok(Json(serde_json::json!({"status": "ok"}))) } pub async fn delete_provider( State(state): State, AdminUser(_user): AdminUser, Path(id): Path, ) -> Result { state.provider_config_command.delete(&id).await?; Ok(axum::http::StatusCode::NO_CONTENT) }