diff options
Diffstat (limited to 'web/template')
| -rw-r--r-- | web/template/Cargo.toml | 1 | ||||
| -rw-r--r-- | web/template/src/router.rs | 23 | ||||
| -rw-r--r-- | web/template/templates/layout.jinja | 2 |
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> |