diff --git a/crates/domain/src/ports.rs b/crates/domain/src/ports.rs index 14d848e..a1f477d 100644 --- a/crates/domain/src/ports.rs +++ b/crates/domain/src/ports.rs @@ -144,6 +144,10 @@ pub trait DiaryRepository: Send + Sync { ) -> Result, DomainError>; async fn get_review_history(&self, movie_id: &MovieId) -> Result; async fn get_user_history(&self, user_id: &UserId) -> Result, DomainError>; + fn stream_user_history( + &self, + user_id: UserId, + ) -> futures::stream::BoxStream<'static, Result>; async fn get_movie_stats(&self, movie_id: &MovieId) -> Result; async fn get_movie_social_feed( &self, @@ -253,13 +257,12 @@ pub trait PasswordHasher: Send + Sync { async fn verify(&self, plain_password: &str, hash: &PasswordHash) -> Result; } -#[async_trait] pub trait DiaryExporter: Send + Sync { - async fn serialize_entries( + fn stream_entries( &self, - entries: &[DiaryEntry], + stream: futures::stream::BoxStream<'static, Result>, format: ExportFormat, - ) -> Result, DomainError>; + ) -> futures::stream::BoxStream<'static, Result>; } #[async_trait] diff --git a/crates/domain/src/testing/fakes.rs b/crates/domain/src/testing/fakes.rs index c36f340..8bb9cf9 100644 --- a/crates/domain/src/testing/fakes.rs +++ b/crates/domain/src/testing/fakes.rs @@ -154,6 +154,13 @@ impl DiaryRepository for FakeDiaryRepository { Ok(vec![]) } + fn stream_user_history( + &self, + _user_id: UserId, + ) -> futures::stream::BoxStream<'static, Result> { + Box::pin(futures::stream::empty()) + } + async fn get_movie_stats(&self, _movie_id: &MovieId) -> Result { Ok(MovieStats { total_count: 0, diff --git a/crates/domain/src/testing/panics.rs b/crates/domain/src/testing/panics.rs index 5484f63..b491927 100644 --- a/crates/domain/src/testing/panics.rs +++ b/crates/domain/src/testing/panics.rs @@ -49,6 +49,12 @@ impl DiaryRepository for PanicDiaryRepository { async fn get_user_history(&self, _: &UserId) -> Result, DomainError> { panic!("PanicDiaryRepository called") } + fn stream_user_history( + &self, + _: UserId, + ) -> futures::stream::BoxStream<'static, Result> { + panic!("PanicDiaryRepository called") + } async fn get_movie_stats(&self, _: &MovieId) -> Result { panic!("PanicDiaryRepository called") } @@ -250,13 +256,12 @@ impl PosterFetcherClient for PanicPosterFetcher { pub struct PanicDiaryExporter; -#[async_trait] impl DiaryExporter for PanicDiaryExporter { - async fn serialize_entries( + fn stream_entries( &self, - _: &[DiaryEntry], - _: ExportFormat, - ) -> Result, DomainError> { + _stream: futures::stream::BoxStream<'static, Result>, + _format: ExportFormat, + ) -> futures::stream::BoxStream<'static, Result> { panic!("PanicDiaryExporter called") } }