diff --git a/crates/presentation/src/dtos.rs b/crates/presentation/src/dtos.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/presentation/src/errors.rs b/crates/presentation/src/errors.rs new file mode 100644 index 0000000..bd67dc2 --- /dev/null +++ b/crates/presentation/src/errors.rs @@ -0,0 +1,32 @@ +use axum::{ + http::StatusCode, + response::{IntoResponse, Response}, +}; +use domain::errors::DomainError; + +pub struct ApiError(DomainError); + +impl From for ApiError { + fn from(err: DomainError) -> Self { + Self(err) + } +} + +impl IntoResponse for ApiError { + fn into_response(self) -> Response { + let (status, error_message) = match self.0 { + DomainError::InvalidRating { .. } => (StatusCode::BAD_REQUEST, self.0.to_string()), + DomainError::ValidationError(msg) => (StatusCode::BAD_REQUEST, msg), + DomainError::NotFound(msg) => (StatusCode::NOT_FOUND, msg), + DomainError::InfrastructureError(_) => { + tracing::error!("Internal Infrastructure Error: {:?}", self.0); + ( + StatusCode::INTERNAL_SERVER_ERROR, + "Internal server error".to_string(), + ) + } + }; + + (status, error_message).into_response() + } +} diff --git a/crates/presentation/src/extractors.rs b/crates/presentation/src/extractors.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/presentation/src/handlers.rs b/crates/presentation/src/handlers.rs new file mode 100644 index 0000000..e69de29 diff --git a/crates/presentation/src/lib.rs b/crates/presentation/src/lib.rs index 40006fc..857540b 100644 --- a/crates/presentation/src/lib.rs +++ b/crates/presentation/src/lib.rs @@ -1 +1,6 @@ +pub mod dtos; +pub mod errors; +pub mod extractors; +pub mod handlers; pub mod ports; +pub mod routes; diff --git a/crates/presentation/src/main.rs b/crates/presentation/src/main.rs index e7a11a9..3239eee 100644 --- a/crates/presentation/src/main.rs +++ b/crates/presentation/src/main.rs @@ -1,3 +1,4 @@ -fn main() { - println!("Hello, world!"); +#[tokio::main] +async fn main() -> anyhow::Result<()> { + Ok(()) } diff --git a/crates/presentation/src/routes.rs b/crates/presentation/src/routes.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/crates/presentation/src/routes.rs @@ -0,0 +1 @@ +