From 27be840faa10ed599166d40156d3a62db8b6cd32 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Mon, 4 May 2026 19:03:48 +0200 Subject: [PATCH] fix: adjust domain accessors and template adapter for Askama compatibility --- crates/adapters/template-askama/Cargo.toml | 1 + crates/adapters/template-askama/src/lib.rs | 7 +++++-- crates/application/src/ports.rs | 6 ++++++ crates/domain/src/models/mod.rs | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/crates/adapters/template-askama/Cargo.toml b/crates/adapters/template-askama/Cargo.toml index 0888c35..af60b90 100644 --- a/crates/adapters/template-askama/Cargo.toml +++ b/crates/adapters/template-askama/Cargo.toml @@ -7,6 +7,7 @@ edition = "2024" askama = { version = "0.16.0" } serde = { workspace = true } +chrono = { workspace = true } domain = { workspace = true } application = { workspace = true } diff --git a/crates/adapters/template-askama/src/lib.rs b/crates/adapters/template-askama/src/lib.rs index f420c0e..be1d1f6 100644 --- a/crates/adapters/template-askama/src/lib.rs +++ b/crates/adapters/template-askama/src/lib.rs @@ -61,7 +61,7 @@ struct UsersTemplate<'a> { #[template(path = "profile.html")] struct ProfileTemplate<'a> { ctx: &'a HtmlPageContext, - profile_user_email: &'a str, + profile_display_name: String, stats: &'a UserStats, view: &'a str, entries: Option<&'a Paginated>, @@ -79,6 +79,7 @@ struct HeatmapCell { bg_style: String, } +#[allow(dead_code)] fn relative_time(dt: chrono::NaiveDateTime) -> String { let now = chrono::Utc::now().naive_utc(); let diff = now.signed_duration_since(dt); @@ -192,9 +193,11 @@ impl HtmlRenderer for AskamaHtmlRenderer { let heatmap = data.history.as_deref() .map(|h| build_heatmap(h)) .unwrap_or_default(); + let profile_display_name = data.profile_user_email + .split('@').next().unwrap_or(&data.profile_user_email).to_string(); ProfileTemplate { ctx: &data.ctx, - profile_user_email: &data.profile_user_email, + profile_display_name, stats: &data.stats, view: &data.view, entries: data.entries.as_ref(), diff --git a/crates/application/src/ports.rs b/crates/application/src/ports.rs index 52a8604..b1d3043 100644 --- a/crates/application/src/ports.rs +++ b/crates/application/src/ports.rs @@ -8,6 +8,12 @@ pub struct HtmlPageContext { pub register_enabled: bool, } +impl HtmlPageContext { + pub fn is_current_user(&self, id: Uuid) -> bool { + self.user_id == Some(id) + } +} + pub struct LoginPageData<'a> { pub ctx: HtmlPageContext, pub error: Option<&'a str>, diff --git a/crates/domain/src/models/mod.rs b/crates/domain/src/models/mod.rs index 4cb1ce4..44ba5f6 100644 --- a/crates/domain/src/models/mod.rs +++ b/crates/domain/src/models/mod.rs @@ -193,6 +193,11 @@ impl Review { pub fn created_at(&self) -> &NaiveDateTime { &self.created_at } + /// Returns [star1_filled, star2_filled, ..., star5_filled] + pub fn stars(&self) -> [bool; 5] { + let r = self.rating.value(); + [r >= 1, r >= 2, r >= 3, r >= 4, r >= 5] + } } #[derive(Clone, Debug)] @@ -306,6 +311,9 @@ impl UserSummary { pub fn avg_rating_display(&self) -> String { self.avg_rating.map(|r| format!("{:.1}", r)).unwrap_or_else(|| "—".to_string()) } + pub fn initial(&self) -> char { + self.display_name().chars().next().unwrap_or('?').to_ascii_uppercase() + } } #[derive(Clone, Debug)] @@ -344,6 +352,12 @@ pub struct MonthlyRating { pub count: i64, } +impl MonthlyRating { + pub fn bar_height_pct(&self) -> i64 { + (self.avg_rating / 5.0 * 100.0) as i64 + } +} + #[derive(Clone, Debug)] pub struct DirectorStat { pub director: String,