diff --git a/Cargo.lock b/Cargo.lock index c5e6068..5f5191f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -320,6 +320,7 @@ dependencies = [ "futures", "hex", "rand 0.9.4", + "reqwest 0.13.3", "serde_json", "sha2", "tokio", @@ -5787,7 +5788,6 @@ name = "tmdb-enrichment" version = "0.1.0" dependencies = [ "anyhow", - "application", "async-trait", "chrono", "domain", diff --git a/crates/adapters/template-askama/src/lib.rs b/crates/adapters/template-askama/src/lib.rs index 20de52c..4bd2859 100644 --- a/crates/adapters/template-askama/src/lib.rs +++ b/crates/adapters/template-askama/src/lib.rs @@ -1,7 +1,7 @@ pub use askama; use askama::Template; -use application::ports::HtmlPageContext; +use application::rendering::HtmlPageContext; use chrono::Datelike; use domain::models::{ DiaryEntry, FeedEntry, MonthActivity, MonthlyRating, ReviewSource, UserStats, UserTrends, diff --git a/crates/application/src/diary/review_logger.rs b/crates/application/src/diary/review_logger.rs index ddef157..102fa0d 100644 --- a/crates/application/src/diary/review_logger.rs +++ b/crates/application/src/diary/review_logger.rs @@ -89,10 +89,6 @@ impl ReviewLogger for DefaultReviewLogger { } } -#[cfg(test)] -#[path = "tests/review_logger.rs"] -mod tests; - async fn publish_events( publisher: &Arc, movie: &Movie, @@ -119,3 +115,7 @@ async fn publish_events( publisher.publish(&review_event).await } + +#[cfg(test)] +#[path = "tests/review_logger.rs"] +mod tests; diff --git a/crates/application/src/lib.rs b/crates/application/src/lib.rs index aff5419..ec02896 100644 --- a/crates/application/src/lib.rs +++ b/crates/application/src/lib.rs @@ -1,6 +1,7 @@ pub mod config; pub mod jobs; pub mod ports; +pub mod rendering; pub mod worker; pub mod auth; diff --git a/crates/application/src/ports.rs b/crates/application/src/ports.rs index a519f62..d54e89a 100644 --- a/crates/application/src/ports.rs +++ b/crates/application/src/ports.rs @@ -1,5 +1,4 @@ use async_trait::async_trait; -use uuid::Uuid; use domain::errors::DomainError; use domain::models::DiaryEntry; @@ -11,24 +10,6 @@ pub trait ReviewLogger: Send + Sync { async fn log_review(&self, cmd: LogReviewCommand) -> Result<(), DomainError>; } -pub struct HtmlPageContext { - pub user_email: Option, - pub user_id: Option, - pub is_admin: bool, - pub register_enabled: bool, - pub rss_url: String, - pub page_title: String, - pub canonical_url: String, - pub csrf_token: String, - pub page_rss_url: Option, -} - -impl HtmlPageContext { - pub fn is_current_user(&self, id: Uuid) -> bool { - self.user_id == Some(id) - } -} - pub trait RssFeedRenderer: Send + Sync { fn render_feed(&self, entries: &[DiaryEntry], title: &str) -> Result; } diff --git a/crates/application/src/rendering.rs b/crates/application/src/rendering.rs new file mode 100644 index 0000000..9f6feb2 --- /dev/null +++ b/crates/application/src/rendering.rs @@ -0,0 +1,19 @@ +use uuid::Uuid; + +pub struct HtmlPageContext { + pub user_email: Option, + pub user_id: Option, + pub is_admin: bool, + pub register_enabled: bool, + pub rss_url: String, + pub page_title: String, + pub canonical_url: String, + pub csrf_token: String, + pub page_rss_url: Option, +} + +impl HtmlPageContext { + pub fn is_current_user(&self, id: Uuid) -> bool { + self.user_id == Some(id) + } +} diff --git a/crates/presentation/src/handlers/auth.rs b/crates/presentation/src/handlers/auth.rs index 4431ba9..c5cc0ba 100644 --- a/crates/presentation/src/handlers/auth.rs +++ b/crates/presentation/src/handlers/auth.rs @@ -24,7 +24,7 @@ use crate::{ use api_types::{ LoginRequest, LoginResponse, LogoutRequest, RefreshRequest, RefreshResponse, RegisterRequest, }; -use application::ports::HtmlPageContext; +use application::rendering::HtmlPageContext; use template_askama::{LoginTemplate, RegisterTemplate}; // ── HTML helpers ───────────────────────────────────────────────────────────── diff --git a/crates/presentation/src/handlers/helpers.rs b/crates/presentation/src/handlers/helpers.rs index e92e92b..d599f5b 100644 --- a/crates/presentation/src/handlers/helpers.rs +++ b/crates/presentation/src/handlers/helpers.rs @@ -1,4 +1,4 @@ -use application::ports::HtmlPageContext; +use application::rendering::HtmlPageContext; use domain::value_objects::UserId; use crate::state::AppState; diff --git a/crates/presentation/src/handlers/wrapup.rs b/crates/presentation/src/handlers/wrapup.rs index b73a833..af5fd97 100644 --- a/crates/presentation/src/handlers/wrapup.rs +++ b/crates/presentation/src/handlers/wrapup.rs @@ -201,7 +201,7 @@ fn format_watch_time(minutes: u32) -> String { fn render_wrapup( report: &WrapUpReport, year: i32, - ctx: &application::ports::HtmlPageContext, + ctx: &application::rendering::HtmlPageContext, ) -> axum::response::Response { let rating_max = report .rating_distribution diff --git a/crates/presentation/src/lib.rs b/crates/presentation/src/lib.rs index 99cfe72..06b44b2 100644 --- a/crates/presentation/src/lib.rs +++ b/crates/presentation/src/lib.rs @@ -7,7 +7,6 @@ pub mod forms; pub mod handlers; pub mod mappers; pub mod openapi; -pub mod ports; pub mod render; pub mod routes; pub mod state; diff --git a/crates/presentation/src/ports.rs b/crates/presentation/src/ports.rs deleted file mode 100644 index 1e84692..0000000 --- a/crates/presentation/src/ports.rs +++ /dev/null @@ -1 +0,0 @@ -pub use application::ports::RssFeedRenderer; diff --git a/crates/presentation/src/state.rs b/crates/presentation/src/state.rs index a098fcd..73e646c 100644 --- a/crates/presentation/src/state.rs +++ b/crates/presentation/src/state.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use crate::context::AppContext; -use crate::ports::RssFeedRenderer; +use application::ports::RssFeedRenderer; #[derive(Clone)] pub struct AppState { diff --git a/crates/presentation/src/tests/extractors.rs b/crates/presentation/src/tests/extractors.rs index d033fb0..cbc2d2a 100644 --- a/crates/presentation/src/tests/extractors.rs +++ b/crates/presentation/src/tests/extractors.rs @@ -416,7 +416,7 @@ impl domain::ports::DocumentParser for Panic { } } -impl crate::ports::RssFeedRenderer for Panic { +impl application::ports::RssFeedRenderer for Panic { fn render_feed(&self, _: &[DiaryEntry], _: &str) -> Result { panic!() }