Skip to main content

kmp_application/consolidation/
service.rs

1use super::{CaptureConsolidationSources, ReadConsolidationView, WriteConsolidationView};
2use kmp_domain::{
3    PortError,
4    consolidation::{
5        ConsolidatedView, ConsolidationRead, ConsolidationSource, ConsolidationStore,
6        ConsolidationWrite,
7    },
8};
9use std::sync::Arc;
10
11/// Thin composition facade for independently owned capture, write and read use cases.
12pub struct ConsolidationApplicationService {
13    capture: CaptureConsolidationSources,
14    write: WriteConsolidationView,
15    read: ReadConsolidationView,
16}
17impl ConsolidationApplicationService {
18    pub fn new(store: Arc<dyn ConsolidationStore>) -> Self {
19        Self {
20            capture: CaptureConsolidationSources::new(store.clone()),
21            write: WriteConsolidationView::new(store.clone()),
22            read: ReadConsolidationView::new(store),
23        }
24    }
25    pub async fn sources(
26        &self,
27        about: String,
28        refs: Vec<String>,
29    ) -> Result<Vec<ConsolidationSource>, PortError> {
30        self.capture.execute(about, refs).await
31    }
32    pub async fn write(&self, command: ConsolidationWrite) -> Result<ConsolidatedView, PortError> {
33        self.write.execute(command).await
34    }
35    pub async fn read(
36        &self,
37        about: String,
38        view: String,
39        revision: Option<u64>,
40    ) -> Result<ConsolidationRead, PortError> {
41        self.read.execute(about, view, revision).await
42    }
43}