use super::traits::ReadUoWFactory;
use crate::types::EntityId;
use anyhow::Result;
pub struct GetUseCase<F: ReadUoWFactory> {
uow_factory: F,
}
impl<F: ReadUoWFactory> GetUseCase<F> {
pub fn new(uow_factory: F) -> Self {
GetUseCase { uow_factory }
}
pub fn execute(&self, id: &EntityId) -> Result<Option<F::Entity>> {
let uow = self.uow_factory.create();
uow.begin_transaction()?;
let entity_option = uow.get(id)?;
uow.end_transaction()?;
Ok(entity_option)
}
pub fn execute_multi(&self, ids: &[EntityId]) -> Result<Vec<Option<F::Entity>>> {
if ids.is_empty() {
return Ok(Vec::new());
}
let uow = self.uow_factory.create();
uow.begin_transaction()?;
let entities = uow.get_multi(ids)?;
uow.end_transaction()?;
Ok(entities)
}
pub fn execute_all(&self) -> Result<Vec<F::Entity>> {
let uow = self.uow_factory.create();
uow.begin_transaction()?;
let entities = uow.get_all()?;
uow.end_transaction()?;
Ok(entities)
}
}