From 7ed2f4c922e744c7a1ff839a629424364a7e723b Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Tue, 28 Feb 2023 17:28:55 +0100
Subject: [PATCH] first route! get logo from database
---
crates/ezidam/src/error/conversion.rs | 7 +++++++
crates/ezidam/src/main.rs | 13 +++++++++++++
crates/ezidam/src/routes/mod.rs | 17 +++++++++++++++++
crates/ezidam/src/routes/root.rs | 16 ++++++++++++++++
4 files changed, 53 insertions(+)
create mode 100644 crates/ezidam/src/error/conversion.rs
create mode 100644 crates/ezidam/src/routes/mod.rs
create mode 100644 crates/ezidam/src/routes/root.rs
diff --git a/crates/ezidam/src/error/conversion.rs b/crates/ezidam/src/error/conversion.rs
new file mode 100644
index 0000000..97a6a13
--- /dev/null
+++ b/crates/ezidam/src/error/conversion.rs
@@ -0,0 +1,7 @@
+use super::Error;
+
+impl From for Error {
+ fn from(e: settings::Error) -> Error {
+ Error::internal_server_error(e)
+ }
+}
diff --git a/crates/ezidam/src/main.rs b/crates/ezidam/src/main.rs
index 0b0ea11..d66890a 100644
--- a/crates/ezidam/src/main.rs
+++ b/crates/ezidam/src/main.rs
@@ -1,4 +1,8 @@
mod database;
+mod error;
+mod file_from_bytes;
+mod response_timer;
+mod routes;
mod shutdown;
// see for using rocket with main function https://github.com/intellij-rust/intellij-rust/issues/5975#issuecomment-920620289
@@ -13,6 +17,15 @@ async fn main() -> std::result::Result<(), rocket::Error> {
// Database
let rocket_builder = database::Database::rocket(rocket_builder);
+ // Templates
+ let rocket_builder = rocket_builder.attach(rocket_dyn_templates::Template::fairing());
+
+ // Routes
+ let rocket_builder = routes::routes(rocket_builder);
+
+ // Errors
+ let rocket_builder = error::catchers::register(rocket_builder);
+
// Shutdown
let rocket_builder = shutdown::shutdown(rocket_builder);
diff --git a/crates/ezidam/src/routes/mod.rs b/crates/ezidam/src/routes/mod.rs
new file mode 100644
index 0000000..0f677ef
--- /dev/null
+++ b/crates/ezidam/src/routes/mod.rs
@@ -0,0 +1,17 @@
+use rocket::{Build, Rocket};
+
+pub mod root;
+
+pub(self) mod prelude {
+ pub use crate::database::Database;
+ pub use crate::error::Error;
+ pub use crate::file_from_bytes::FileFromBytes;
+ pub use rocket_db_pools::Connection;
+
+ pub type Result = std::result::Result;
+}
+
+pub fn routes(rocket_builder: Rocket) -> Rocket {
+ // Root
+ rocket_builder.mount("/", root::routes())
+}
diff --git a/crates/ezidam/src/routes/root.rs b/crates/ezidam/src/routes/root.rs
new file mode 100644
index 0000000..4e48c7e
--- /dev/null
+++ b/crates/ezidam/src/routes/root.rs
@@ -0,0 +1,16 @@
+use super::prelude::*;
+use rocket::{get, routes};
+use settings::Settings;
+
+pub fn routes() -> Vec {
+ routes![logo]
+}
+
+#[get("/logo")]
+async fn logo(mut db: Connection) -> Result {
+ // Get settings
+ let settings = Settings::get(&mut *db).await?;
+
+ // HTTP response
+ Ok(FileFromBytes::from(settings.business_logo()))
+}