diff --git a/src/application/routes/auth.rs b/src/application/routes/auth.rs index ab4f7d1..53be9cb 100644 --- a/src/application/routes/auth.rs +++ b/src/application/routes/auth.rs @@ -20,6 +20,7 @@ const SESSION_COOKIE_NAME: &str = "brewlog_session"; struct LoginTemplate { nav_active: &'static str, is_authenticated: bool, + has_ai_extract: bool, error: Option, } @@ -42,6 +43,7 @@ pub(crate) async fn login_page( let template = LoginTemplate { nav_active: "login", is_authenticated: false, + has_ai_extract: false, error: None, }; @@ -130,6 +132,7 @@ fn show_login_error(message: &str) -> Result { let template = LoginTemplate { nav_active: "login", is_authenticated: false, + has_ai_extract: false, error: Some(message.to_string()), }; diff --git a/src/application/routes/bags.rs b/src/application/routes/bags.rs index d786a48..2b90949 100644 --- a/src/application/routes/bags.rs +++ b/src/application/routes/bags.rs @@ -99,6 +99,7 @@ pub(crate) async fn bags_page( let template = BagsTemplate { nav_active: "bags", is_authenticated, + has_ai_extract: state.has_ai_extract(), open_bags, bags, roaster_options, diff --git a/src/application/routes/brews.rs b/src/application/routes/brews.rs index 12a821b..2dd0c11 100644 --- a/src/application/routes/brews.rs +++ b/src/application/routes/brews.rs @@ -186,6 +186,7 @@ pub(crate) async fn brews_page( let template = BrewsTemplate { nav_active: "brews", is_authenticated, + has_ai_extract: state.has_ai_extract(), brews, bag_options, grinder_options, diff --git a/src/application/routes/cafes.rs b/src/application/routes/cafes.rs index 5397e29..8ff8a40 100644 --- a/src/application/routes/cafes.rs +++ b/src/application/routes/cafes.rs @@ -69,6 +69,7 @@ pub(crate) async fn cafes_page( let template = CafesTemplate { nav_active: "cafes", is_authenticated, + has_ai_extract: state.has_ai_extract(), cafes, navigator, }; @@ -94,6 +95,7 @@ pub(crate) async fn cafe_page( let template = CafeDetailTemplate { nav_active: "cafes", is_authenticated, + has_ai_extract: state.has_ai_extract(), cafe: cafe_view, }; diff --git a/src/application/routes/cups.rs b/src/application/routes/cups.rs index 8723b8f..ed68ebc 100644 --- a/src/application/routes/cups.rs +++ b/src/application/routes/cups.rs @@ -74,6 +74,7 @@ pub(crate) async fn cups_page( let template = CupsTemplate { nav_active: "cups", is_authenticated, + has_ai_extract: state.has_ai_extract(), cups, roast_options, cafe_options, diff --git a/src/application/routes/gear.rs b/src/application/routes/gear.rs index 4dc2473..a44738c 100644 --- a/src/application/routes/gear.rs +++ b/src/application/routes/gear.rs @@ -71,6 +71,7 @@ pub(crate) async fn gear_page( let template = GearTemplate { nav_active: "gear", is_authenticated, + has_ai_extract: state.has_ai_extract(), gear, navigator, }; diff --git a/src/application/routes/roasters.rs b/src/application/routes/roasters.rs index 071e3de..1555340 100644 --- a/src/application/routes/roasters.rs +++ b/src/application/routes/roasters.rs @@ -101,6 +101,7 @@ pub(crate) async fn roaster_page( let template = RoasterDetailTemplate { nav_active: "roasters", is_authenticated, + has_ai_extract: state.has_ai_extract(), roaster: roaster_view, roasts: roasts.into_iter().map(RoastView::from_list_item).collect(), }; diff --git a/src/application/routes/roasts.rs b/src/application/routes/roasts.rs index 2c49c31..250a5da 100644 --- a/src/application/routes/roasts.rs +++ b/src/application/routes/roasts.rs @@ -121,6 +121,7 @@ pub(crate) async fn roast_page( let template = RoastDetailTemplate { nav_active: "roasts", is_authenticated, + has_ai_extract: state.has_ai_extract(), roast: RoastView::from_domain(roast, &roaster.name, &roaster.slug), bags: bag_views, }; diff --git a/src/application/routes/timeline.rs b/src/application/routes/timeline.rs index 5a8985b..bc3dd53 100644 --- a/src/application/routes/timeline.rs +++ b/src/application/routes/timeline.rs @@ -93,6 +93,7 @@ pub(crate) async fn timeline_page( let template = TimelineTemplate { nav_active: "timeline", is_authenticated, + has_ai_extract: state.has_ai_extract(), events: data.events, navigator: data.navigator, months: data.months, diff --git a/src/presentation/web/templates.rs b/src/presentation/web/templates.rs index f011b8d..611fb43 100644 --- a/src/presentation/web/templates.rs +++ b/src/presentation/web/templates.rs @@ -37,6 +37,7 @@ pub struct RoasterListTemplate { pub struct RoasterDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub roaster: RoasterView, pub roasts: Vec, } @@ -57,6 +58,7 @@ pub struct RoastsTemplate { pub struct RoastDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub roast: RoastView, pub bags: Vec, } @@ -74,6 +76,7 @@ pub struct RoastListTemplate { pub struct TimelineTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub events: Paginated, pub navigator: ListNavigator, pub months: Vec, @@ -93,6 +96,7 @@ pub struct TimelineChunkTemplate { pub struct BagsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub open_bags: Vec, pub bags: Paginated, pub roaster_options: Vec, @@ -113,6 +117,7 @@ pub struct BagListTemplate { pub struct GearTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub gear: Paginated, pub navigator: ListNavigator, } @@ -136,6 +141,7 @@ pub struct RoastOptionsTemplate { pub struct BrewsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub brews: Paginated, pub bag_options: Vec, pub grinder_options: Vec, @@ -158,6 +164,7 @@ pub struct BrewListTemplate { pub struct CafesTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub cafes: Paginated, pub navigator: ListNavigator, } @@ -175,6 +182,7 @@ pub struct CafeListTemplate { pub struct CafeDetailTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub cafe: CafeView, } @@ -183,6 +191,7 @@ pub struct CafeDetailTemplate { pub struct CupsTemplate { pub nav_active: &'static str, pub is_authenticated: bool, + pub has_ai_extract: bool, pub cups: Paginated, pub roast_options: Vec, pub cafe_options: Vec, @@ -197,6 +206,14 @@ pub struct CupListTemplate { pub navigator: ListNavigator, } +#[derive(Template)] +#[template(path = "scan.html")] +pub struct ScanTemplate { + pub nav_active: &'static str, + pub is_authenticated: bool, + pub has_ai_extract: bool, +} + pub fn render_template(template: T) -> Result { template.render() }