diff --git a/crates/application/src/ports.rs b/crates/application/src/ports.rs index 80458b9..f11ff46 100644 --- a/crates/application/src/ports.rs +++ b/crates/application/src/ports.rs @@ -1,7 +1,30 @@ use domain::models::{DiaryEntry, collections::Paginated}; +pub struct HtmlPageContext { + pub user_email: Option, + pub register_enabled: bool, +} + +pub struct LoginPageData<'a> { + pub ctx: HtmlPageContext, + pub error: Option<&'a str>, +} + +pub struct RegisterPageData<'a> { + pub ctx: HtmlPageContext, + pub error: Option<&'a str>, +} + +pub struct NewReviewPageData<'a> { + pub ctx: HtmlPageContext, + pub error: Option<&'a str>, +} + pub trait HtmlRenderer: Send + Sync { - fn render_diary_page(&self, data: &Paginated) -> Result; + fn render_diary_page(&self, data: &Paginated, ctx: HtmlPageContext) -> Result; + fn render_login_page(&self, data: LoginPageData<'_>) -> Result; + fn render_register_page(&self, data: RegisterPageData<'_>) -> Result; + fn render_new_review_page(&self, data: NewReviewPageData<'_>) -> Result; } pub trait RssFeedRenderer: Send + Sync { diff --git a/crates/presentation/src/extractors.rs b/crates/presentation/src/extractors.rs index 7a25960..c4e951a 100644 --- a/crates/presentation/src/extractors.rs +++ b/crates/presentation/src/extractors.rs @@ -76,7 +76,10 @@ mod tests { struct PanicRenderer; impl crate::ports::HtmlRenderer for PanicRenderer { - fn render_diary_page(&self, _: &domain::models::collections::Paginated) -> Result { panic!() } + fn render_diary_page(&self, _: &domain::models::collections::Paginated, _: application::ports::HtmlPageContext) -> Result { panic!() } + fn render_login_page(&self, _: application::ports::LoginPageData<'_>) -> Result { panic!() } + fn render_register_page(&self, _: application::ports::RegisterPageData<'_>) -> Result { panic!() } + fn render_new_review_page(&self, _: application::ports::NewReviewPageData<'_>) -> Result { panic!() } } struct PanicRssRenderer; @@ -91,7 +94,7 @@ mod tests { #[async_trait::async_trait] impl domain::ports::EventPublisher for PanicEvent { async fn publish(&self, _: &domain::events::DomainEvent) -> Result<(), domain::errors::DomainError> { panic!() } } #[async_trait::async_trait] impl domain::ports::PasswordHasher for PanicHasher { async fn hash(&self, _: &str) -> Result { panic!() } async fn verify(&self, _: &str, _: &domain::value_objects::PasswordHash) -> Result { panic!() } } #[async_trait::async_trait] impl domain::ports::AuthService for PanicAuth { async fn generate_token(&self, _: &domain::value_objects::UserId) -> Result { panic!() } async fn validate_token(&self, _: &str) -> Result { panic!() } } - #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } } + #[async_trait::async_trait] impl domain::ports::UserRepository for PanicUserRepo { async fn find_by_email(&self, _: &domain::value_objects::Email) -> Result, domain::errors::DomainError> { panic!() } async fn save(&self, _: &domain::models::User) -> Result<(), domain::errors::DomainError> { panic!() } async fn find_by_id(&self, _: &domain::value_objects::UserId) -> Result, domain::errors::DomainError> { panic!() } } let state = crate::state::AppState { app_ctx: AppContext {