aboutsummaryrefslogtreecommitdiffstats
path: root/crates/configuration/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'crates/configuration/src/server')
-rw-r--r--crates/configuration/src/server/http_svc/routes.rs5
-rw-r--r--crates/configuration/src/server/http_svc/routes/routing.rs2
-rw-r--r--crates/configuration/src/server/http_svc/routes/routing/get_active.rs1
-rw-r--r--crates/configuration/src/server/http_svc/routes/routing/post_routing.rs39
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)))
+}