text_document_common/direct_access/use_cases/
get.rs1use super::traits::ReadUoWFactory;
4use crate::types::EntityId;
5use anyhow::Result;
6
7pub struct GetUseCase<F: ReadUoWFactory> {
8 uow_factory: F,
9}
10
11impl<F: ReadUoWFactory> GetUseCase<F> {
12 pub fn new(uow_factory: F) -> Self {
13 GetUseCase { uow_factory }
14 }
15
16 pub fn execute(&self, id: &EntityId) -> Result<Option<F::Entity>> {
17 let uow = self.uow_factory.create();
18 uow.begin_transaction()?;
19 let entity_option = uow.get(id)?;
20 uow.end_transaction()?;
21 Ok(entity_option)
22 }
23
24 pub fn execute_multi(&self, ids: &[EntityId]) -> Result<Vec<Option<F::Entity>>> {
25 if ids.is_empty() {
26 return Ok(Vec::new());
27 }
28 let uow = self.uow_factory.create();
29 uow.begin_transaction()?;
30 let entities = uow.get_multi(ids)?;
31 uow.end_transaction()?;
32 Ok(entities)
33 }
34
35 pub fn execute_all(&self) -> Result<Vec<F::Entity>> {
36 let uow = self.uow_factory.create();
37 uow.begin_transaction()?;
38 let entities = uow.get_all()?;
39 uow.end_transaction()?;
40 Ok(entities)
41 }
42}