use crate::use_cases::find_text_uc::{FindTextUnitOfWorkFactoryTrait, FindTextUnitOfWorkTrait};
use anyhow::{Ok, Result};
use common::database::QueryUnitOfWork;
use common::database::{db_context::DbContext, transactions::Transaction};
#[allow(unused_imports)]
use common::entities::{Block, Document, Frame, Root};
#[allow(unused_imports)]
use common::types;
#[allow(unused_imports)]
use common::types::EntityId;
use std::cell::RefCell;
pub struct FindTextUnitOfWork {
context: DbContext,
transaction: RefCell<Option<Transaction>>,
}
impl FindTextUnitOfWork {
pub fn new(db_context: &DbContext) -> Self {
FindTextUnitOfWork {
context: db_context.clone(),
transaction: RefCell::new(None),
}
}
}
impl QueryUnitOfWork for FindTextUnitOfWork {
fn begin_transaction(&self) -> Result<()> {
self.transaction
.replace(Some(Transaction::begin_read_transaction(&self.context)?));
Ok(())
}
fn end_transaction(&self) -> Result<()> {
self.transaction.take().unwrap().end_read_transaction()?;
Ok(())
}
}
#[macros::uow_action(entity = "Root", action = "GetRO")]
#[macros::uow_action(entity = "Root", action = "GetRelationshipRO")]
#[macros::uow_action(entity = "Document", action = "GetRelationshipRO")]
#[macros::uow_action(entity = "Frame", action = "GetRelationshipRO")]
#[macros::uow_action(entity = "Block", action = "GetMultiRO")]
impl FindTextUnitOfWorkTrait for FindTextUnitOfWork {}
pub struct FindTextUnitOfWorkFactory {
context: DbContext,
}
impl FindTextUnitOfWorkFactory {
pub fn new(db_context: &DbContext) -> Self {
FindTextUnitOfWorkFactory {
context: db_context.clone(),
}
}
}
impl FindTextUnitOfWorkFactoryTrait for FindTextUnitOfWorkFactory {
fn create(&self) -> Box<dyn FindTextUnitOfWorkTrait> {
Box::new(FindTextUnitOfWork::new(&self.context))
}
}