diff --git a/crates/application/Cargo.toml b/crates/application/Cargo.toml index 98620b8..cb47320 100644 --- a/crates/application/Cargo.toml +++ b/crates/application/Cargo.toml @@ -15,6 +15,7 @@ sha2 = { workspace = true } rand = { workspace = true } hex = { workspace = true } serde_json = { workspace = true } +bytes = { workspace = true } [features] xlsx = [] diff --git a/crates/application/src/diary/export_diary.rs b/crates/application/src/diary/export_diary.rs index 0eda689..4c80322 100644 --- a/crates/application/src/diary/export_diary.rs +++ b/crates/application/src/diary/export_diary.rs @@ -1,22 +1,21 @@ use std::sync::Arc; +use bytes::Bytes; use domain::{ errors::DomainError, ports::{DiaryExporter, DiaryRepository}, value_objects::UserId, }; +use futures::stream::BoxStream; use crate::diary::queries::ExportQuery; -pub async fn execute( +pub fn execute( diary: &Arc, diary_exporter: &Arc, query: ExportQuery, -) -> Result, DomainError> { - let entries = diary - .get_user_history(&UserId::from_uuid(query.user_id)) - .await?; - diary_exporter - .serialize_entries(&entries, query.format) - .await +) -> BoxStream<'static, Result> { + let user_id = UserId::from_uuid(query.user_id); + let entry_stream = diary.stream_user_history(user_id); + diary_exporter.stream_entries(entry_stream, query.format) }