feat(application): export_diary::execute returns BoxStream<Bytes>
This commit is contained in:
@@ -15,6 +15,7 @@ sha2 = { workspace = true }
|
|||||||
rand = { workspace = true }
|
rand = { workspace = true }
|
||||||
hex = { workspace = true }
|
hex = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
bytes = { workspace = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
xlsx = []
|
xlsx = []
|
||||||
|
|||||||
@@ -1,22 +1,21 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use bytes::Bytes;
|
||||||
use domain::{
|
use domain::{
|
||||||
errors::DomainError,
|
errors::DomainError,
|
||||||
ports::{DiaryExporter, DiaryRepository},
|
ports::{DiaryExporter, DiaryRepository},
|
||||||
value_objects::UserId,
|
value_objects::UserId,
|
||||||
};
|
};
|
||||||
|
use futures::stream::BoxStream;
|
||||||
|
|
||||||
use crate::diary::queries::ExportQuery;
|
use crate::diary::queries::ExportQuery;
|
||||||
|
|
||||||
pub async fn execute(
|
pub fn execute(
|
||||||
diary: &Arc<dyn DiaryRepository>,
|
diary: &Arc<dyn DiaryRepository>,
|
||||||
diary_exporter: &Arc<dyn DiaryExporter>,
|
diary_exporter: &Arc<dyn DiaryExporter>,
|
||||||
query: ExportQuery,
|
query: ExportQuery,
|
||||||
) -> Result<Vec<u8>, DomainError> {
|
) -> BoxStream<'static, Result<Bytes, DomainError>> {
|
||||||
let entries = diary
|
let user_id = UserId::from_uuid(query.user_id);
|
||||||
.get_user_history(&UserId::from_uuid(query.user_id))
|
let entry_stream = diary.stream_user_history(user_id);
|
||||||
.await?;
|
diary_exporter.stream_entries(entry_stream, query.format)
|
||||||
diary_exporter
|
|
||||||
.serialize_entries(&entries, query.format)
|
|
||||||
.await
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user