From fdfd1c98e010ae53935b23e06d272d99b3a8f76b Mon Sep 17 00:00:00 2001 From: GW_MC <72297530+GWMCwing@users.noreply.github.com> Date: Mon, 29 Dec 2025 18:03:09 +0800 Subject: [PATCH] feat: introduce ApiError for improved error handling in upstream routes --- apps/api/src/errors.rs | 1 + apps/api/src/errors/api_error.rs | 21 +++++++++++++++++++ .../restricted/nginx/upstream/get_upstream.rs | 4 ++-- .../nginx/upstream/get_upstream_target.rs | 4 ++-- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 apps/api/src/errors/api_error.rs diff --git a/apps/api/src/errors.rs b/apps/api/src/errors.rs index ae13070..d261f2c 100644 --- a/apps/api/src/errors.rs +++ b/apps/api/src/errors.rs @@ -1 +1,2 @@ +pub mod api_error; pub mod service_error; diff --git a/apps/api/src/errors/api_error.rs b/apps/api/src/errors/api_error.rs new file mode 100644 index 0000000..8f16996 --- /dev/null +++ b/apps/api/src/errors/api_error.rs @@ -0,0 +1,21 @@ +use axum::response::IntoResponse; + +use crate::errors::service_error::ServiceError; + +pub enum ApiError { + ServiceError(ServiceError), +} + +impl From for ApiError { + fn from(err: ServiceError) -> Self { + ApiError::ServiceError(err) + } +} + +impl IntoResponse for ApiError { + fn into_response(self) -> axum::response::Response { + match self { + ApiError::ServiceError(service_error) => service_error.into_response(), + } + } +} diff --git a/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream.rs b/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream.rs index 65777b7..e1cdd95 100644 --- a/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream.rs +++ b/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream.rs @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::{ - errors::service_error::ServiceError, + errors::{api_error::ApiError, service_error::ServiceError}, routes::{ AppState, api::{ @@ -64,7 +64,7 @@ pub async fn get_upstream( Path(upstream_id): Path, Query(params): Query, State(_state): State>, -) -> AxumResult, ServiceError> { +) -> AxumResult, ApiError> { let concrete_params: ConcreteGetUpstreamParams = params.into(); let upstream_service = &_state.service.nginx.get_upstream_service(); let upstream_info = if concrete_params.include_targets { diff --git a/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream_target.rs b/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream_target.rs index 4d9de96..fdc5d47 100644 --- a/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream_target.rs +++ b/apps/api/src/routes/api/restricted/nginx/upstream/get_upstream_target.rs @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::{ - errors::service_error::ServiceError, + errors::{api_error::ApiError, service_error::ServiceError}, routes::{AppState, api::restricted::nginx::upstream::info::response::UpstreamTargetInfo}, }; @@ -34,7 +34,7 @@ pub async fn get_upstream_target( Path(upstream_target_id): Path, Query(params): Query, State(_state): State>, -) -> AxumResult, ServiceError> { +) -> AxumResult, ApiError> { let concrete_params: ConcreteGetUpstreamTargetsParams = params.into(); let upstream_service = &_state.service.nginx.get_upstream_service(); let upstream_target_info = upstream_service