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