diff options
Diffstat (limited to 'crates/configuration/src/server')
4 files changed, 45 insertions, 2 deletions
diff --git a/crates/configuration/src/server/http_svc/routes.rs b/crates/configuration/src/server/http_svc/routes.rs index e70dccd..bec7c77 100644 --- a/crates/configuration/src/server/http_svc/routes.rs +++ b/crates/configuration/src/server/http_svc/routes.rs @@ -6,6 +6,9 @@ use crate::state::AppHandle; pub fn router(store: AppHandle) -> OpenApiRouter { OpenApiRouter::new() - .routes(routes!(routing::get_active::active_routing)) + .routes(routes!( + routing::get_active::active_routing, + routing::post_routing::post_routing + )) .with_state(store) } diff --git a/crates/configuration/src/server/http_svc/routes/routing.rs b/crates/configuration/src/server/http_svc/routes/routing.rs index 7c8affe..9013494 100644 --- a/crates/configuration/src/server/http_svc/routes/routing.rs +++ b/crates/configuration/src/server/http_svc/routes/routing.rs @@ -1,4 +1,4 @@ //pub mod delete_routing; pub mod get_active; -//pub mod post_routing; +pub mod post_routing; //pub mod replace_routing; diff --git a/crates/configuration/src/server/http_svc/routes/routing/get_active.rs b/crates/configuration/src/server/http_svc/routes/routing/get_active.rs index 9dc22e3..4875a80 100644 --- a/crates/configuration/src/server/http_svc/routes/routing/get_active.rs +++ b/crates/configuration/src/server/http_svc/routes/routing/get_active.rs @@ -10,6 +10,7 @@ use crate::{ state::AppHandle, }; +/// Get active routing configuration #[utoipa::path( get, responses(( diff --git a/crates/configuration/src/server/http_svc/routes/routing/post_routing.rs b/crates/configuration/src/server/http_svc/routes/routing/post_routing.rs new file mode 100644 index 0000000..3578b65 --- /dev/null +++ b/crates/configuration/src/server/http_svc/routes/routing/post_routing.rs @@ -0,0 +1,39 @@ +use axum::{extract::State, response::IntoResponse}; +use warden_core::configuration::routing::{ + RoutingConfiguration, mutate_routing_server::MutateRouting, +}; + +use crate::{ + server::{error::AppError, http_svc::TAG_ROUTING, version::Version}, + state::AppHandle, +}; + +/// Create routing configuration +#[utoipa::path( + post, + responses(( + status = CREATED, + body = RoutingConfiguration + )), + operation_id = "post_routing_configuration", // https://github.com/juhaku/utoipa/issues/1170 + path = "/{version}/routing", + params( + ("version" = Version, Path, description = "API version, e.g., v1, v2, v3") + ), + tag = TAG_ROUTING, +) +] +#[axum::debug_handler] +#[tracing::instrument(skip(state), err(Debug), fields(method = "POST"))] +pub async fn post_routing( + version: Version, + State(state): State<AppHandle>, + axum::Json(body): axum::Json<RoutingConfiguration>, +) -> Result<impl IntoResponse, AppError> { + let response = state + .create_routing_configuration(tonic::Request::new(body)) + .await? + .into_inner(); + + Ok((axum::http::StatusCode::CREATED, axum::Json(response))) +} |