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