text_document_search/
document_search_controller.rs1use crate::FindAllDto;
4use crate::FindAllResultDto;
5use crate::FindResultDto;
6use crate::FindTextDto;
7use crate::ReplaceResultDto;
8use crate::ReplaceTextDto;
9use crate::units_of_work::find_all_uow::FindAllUnitOfWorkFactory;
10use crate::units_of_work::find_text_uow::FindTextUnitOfWorkFactory;
11use crate::units_of_work::replace_text_uow::ReplaceTextUnitOfWorkFactory;
12use crate::use_cases::find_all_uc::FindAllUseCase;
13use crate::use_cases::find_text_uc::FindTextUseCase;
14use crate::use_cases::replace_text_uc::ReplaceTextUseCase;
15use anyhow::Result;
16use common::event::{Event, Origin};
17
18use common::event::DocumentSearchEvent::FindAll;
19use common::event::DocumentSearchEvent::FindText;
20use common::event::DocumentSearchEvent::ReplaceText;
21
22use common::undo_redo::UndoRedoManager;
23use common::{database::db_context::DbContext, event::EventHub};
24use std::sync::Arc;
25
26pub fn find_text(
27 db_context: &DbContext,
28 event_hub: &Arc<EventHub>,
29 dto: &FindTextDto,
30) -> Result<FindResultDto> {
31 let uow_context = FindTextUnitOfWorkFactory::new(db_context);
32 let mut uc = FindTextUseCase::new(Box::new(uow_context));
33 let return_dto = uc.execute(dto)?;
34 event_hub.send_event(Event {
36 origin: Origin::DocumentSearch(FindText),
37 ids: vec![],
38 data: None,
39 });
40 Ok(return_dto)
41}
42
43pub fn find_all(
44 db_context: &DbContext,
45 event_hub: &Arc<EventHub>,
46 dto: &FindAllDto,
47) -> Result<FindAllResultDto> {
48 let uow_context = FindAllUnitOfWorkFactory::new(db_context);
49 let mut uc = FindAllUseCase::new(Box::new(uow_context));
50 let return_dto = uc.execute(dto)?;
51 event_hub.send_event(Event {
53 origin: Origin::DocumentSearch(FindAll),
54 ids: vec![],
55 data: None,
56 });
57 Ok(return_dto)
58}
59
60pub fn replace_text(
61 db_context: &DbContext,
62 event_hub: &Arc<EventHub>,
63 undo_redo_manager: &mut UndoRedoManager,
64 stack_id: Option<u64>,
65 dto: &ReplaceTextDto,
66) -> Result<ReplaceResultDto> {
67 let uow_context = ReplaceTextUnitOfWorkFactory::new(db_context, event_hub);
68 let mut uc = ReplaceTextUseCase::new(Box::new(uow_context));
69 let return_dto = uc.execute(dto)?;
70 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
71 event_hub.send_event(Event {
73 origin: Origin::DocumentSearch(ReplaceText),
74 ids: vec![],
75 data: None,
76 });
77 Ok(return_dto)
78}