aboutsummaryrefslogtreecommitdiffstats
path: root/web/template
diff options
context:
space:
mode:
authormsi2025-11-13 17:26:20 -0300
committermsi2025-11-13 17:26:20 -0300
commitc7a127938cc306c8499617dab086101579e2db8f (patch)
treee8ff729d801b816bf7a6e6ee3efab61033765d21 /web/template
parentabbece2d4cffddf1a71d31ee715695610cb7871a (diff)
downloadtemplates-c7a127938cc306c8499617dab086101579e2db8f.tar.gz
Add messages layer
Diffstat (limited to 'web/template')
-rw-r--r--web/template/Cargo.toml1
-rw-r--r--web/template/src/router.rs23
-rw-r--r--web/template/templates/layout.jinja2
3 files changed, 25 insertions, 1 deletions
diff --git a/web/template/Cargo.toml b/web/template/Cargo.toml
index 63bc87a..007e47f 100644
--- a/web/template/Cargo.toml
+++ b/web/template/Cargo.toml
@@ -9,6 +9,7 @@ edition = "2024"
[dependencies]
anyhow = "=1.0.100"
axum = "=0.8.6"
+axum-messages = "0.8.0"
metrics = { version = "=0.24.2", default-features = false }
metrics-exporter-prometheus = { version = "=0.17.2", default-features = false }
minijinja = "=2.12.0"
diff --git a/web/template/src/router.rs b/web/template/src/router.rs
index 45112a3..aaa8b25 100644
--- a/web/template/src/router.rs
+++ b/web/template/src/router.rs
@@ -20,9 +20,10 @@ use axum::{
extract::State,
http::{HeaderName, Request, StatusCode},
middleware,
- response::{Html, IntoResponse},
+ response::{Html, IntoResponse, Redirect},
routing::get,
};
+use axum_messages::{Messages, MessagesManagerLayer};
use minijinja::context;
use serde::{Deserialize, Serialize};
use time::Duration;
@@ -56,6 +57,9 @@ pub(crate) fn route(app_state: Arc<AppState>) -> Router {
.route("/content", get(handler_content))
.route("/about", get(handler_about))
.route("/session", get(handler_session))
+ .route("/message", get(set_messages_handler))
+ .route("/read-messages", get(read_messages_handler))
+ .layer(MessagesManagerLayer)
// TODO(msi): from config folder asssets
.nest_service("/assets", ServeDir::new("assets"))
.layer((
@@ -80,6 +84,7 @@ pub(crate) fn route(app_state: Arc<AppState>) -> Router {
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
+ MessagesManagerLayer,
// TODO(msi): from config
TimeoutLayer::new(std::time::Duration::from_secs(10)),
PropagateRequestIdLayer::new(x_request_id),
@@ -89,6 +94,22 @@ pub(crate) fn route(app_state: Arc<AppState>) -> Router {
.with_state(app_state)
}
+async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
+ messages.info("Hello, world!").debug("This is a debug message.");
+
+ Redirect::to("/read-messages")
+}
+
+async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
+ let messages = messages
+ .into_iter()
+ .map(|message| format!("{}: {}", message.level, message))
+ .collect::<Vec<_>>()
+ .join(", ");
+
+ if messages.is_empty() { "No messages yet!".to_string() } else { messages }
+}
+
async fn handler_session(session: Session) -> impl IntoResponse {
let counter: Counter =
session.get(COUNTER_KEY).await.unwrap().unwrap_or_default();
diff --git a/web/template/templates/layout.jinja b/web/template/templates/layout.jinja
index 1ee943a..946dcdc 100644
--- a/web/template/templates/layout.jinja
+++ b/web/template/templates/layout.jinja
@@ -9,6 +9,8 @@
<li><a href="/content">Content</a></li>
<li><a href="/about">About</a></li>
<li><a href="/session">Session</a></li>
+ <li><a href="/message">Set Message</a></li>
+ <li><a href="/read-messages">Read Messages</a></li>
</ul>
</nav>
<h1><h1>Hello, World web =]</h1>