2026-04-07 12:15:19 +08:00
|
|
|
use crate::handlers::admin::provider::shared::paths::admin_provider_available_source_models_path;
|
2026-04-09 00:10:38 +08:00
|
|
|
use crate::handlers::admin::request::{AdminAppState, AdminRequestContext};
|
|
|
|
|
use crate::GatewayError;
|
2026-04-04 01:40:24 +08:00
|
|
|
use axum::{
|
|
|
|
|
body::{Body, Bytes},
|
|
|
|
|
http,
|
|
|
|
|
response::{IntoResponse, Response},
|
|
|
|
|
Json,
|
|
|
|
|
};
|
|
|
|
|
use serde_json::json;
|
2026-04-03 14:59:58 +08:00
|
|
|
|
|
|
|
|
pub(super) async fn maybe_handle(
|
2026-04-09 00:10:38 +08:00
|
|
|
state: &AdminAppState<'_>,
|
|
|
|
|
request_context: &AdminRequestContext<'_>,
|
2026-04-04 01:40:24 +08:00
|
|
|
_request_body: Option<&Bytes>,
|
2026-04-03 14:59:58 +08:00
|
|
|
) -> Result<Option<Response<Body>>, GatewayError> {
|
2026-04-09 00:10:38 +08:00
|
|
|
if request_context.route_family() == Some("provider_models_manage")
|
|
|
|
|
&& request_context.route_kind() == Some("available_source_models")
|
|
|
|
|
&& request_context.method() == http::Method::GET
|
2026-04-03 14:59:58 +08:00
|
|
|
{
|
2026-04-09 00:10:38 +08:00
|
|
|
let Some(provider_id) = admin_provider_available_source_models_path(request_context.path())
|
2026-04-03 14:59:58 +08:00
|
|
|
else {
|
|
|
|
|
return Ok(Some(
|
|
|
|
|
(
|
|
|
|
|
http::StatusCode::NOT_FOUND,
|
|
|
|
|
Json(json!({ "detail": "Provider 不存在" })),
|
|
|
|
|
)
|
|
|
|
|
.into_response(),
|
|
|
|
|
));
|
|
|
|
|
};
|
|
|
|
|
return Ok(Some(
|
2026-04-09 00:10:38 +08:00
|
|
|
match state
|
|
|
|
|
.build_admin_provider_available_source_models_payload(&provider_id)
|
|
|
|
|
.await
|
|
|
|
|
{
|
2026-04-03 14:59:58 +08:00
|
|
|
Some(payload) => Json(payload).into_response(),
|
|
|
|
|
None => (
|
|
|
|
|
http::StatusCode::NOT_FOUND,
|
|
|
|
|
Json(json!({ "detail": format!("Provider {provider_id} 不存在") })),
|
|
|
|
|
)
|
|
|
|
|
.into_response(),
|
|
|
|
|
},
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(None)
|
|
|
|
|
}
|