text-document-common 1.4.1

Shared entities, database, events, and undo/redo infrastructure for text-document
Documentation
// Generated by Qleany v1.4.8 from common_da_use_cases_get.tera

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)
    }
}