1use crate::CreateListDto;
4use crate::CreateListResultDto;
5use crate::DeleteTextDto;
6use crate::DeleteTextResultDto;
7use crate::InsertBlockDto;
8use crate::InsertBlockResultDto;
9use crate::InsertFormattedTextDto;
10use crate::InsertFormattedTextResultDto;
11use crate::InsertFragmentDto;
12use crate::InsertFragmentResultDto;
13use crate::InsertFrameDto;
14use crate::InsertFrameResultDto;
15use crate::InsertHtmlAtPositionDto;
16use crate::InsertHtmlAtPositionResultDto;
17use crate::InsertImageDto;
18use crate::InsertImageResultDto;
19use crate::InsertListDto;
20use crate::InsertListResultDto;
21use crate::InsertMarkdownAtPositionDto;
22use crate::InsertMarkdownAtPositionResultDto;
23use crate::InsertTextDto;
24use crate::InsertTextResultDto;
25use crate::units_of_work::create_list_uow::CreateListUnitOfWorkFactory;
26use crate::units_of_work::delete_text_uow::DeleteTextUnitOfWorkFactory;
27use crate::units_of_work::insert_block_uow::InsertBlockUnitOfWorkFactory;
28use crate::units_of_work::insert_formatted_text_uow::InsertFormattedTextUnitOfWorkFactory;
29use crate::units_of_work::insert_fragment_uow::InsertFragmentUnitOfWorkFactory;
30use crate::units_of_work::insert_frame_uow::InsertFrameUnitOfWorkFactory;
31use crate::units_of_work::insert_html_at_position_uow::InsertHtmlAtPositionUnitOfWorkFactory;
32use crate::units_of_work::insert_image_uow::InsertImageUnitOfWorkFactory;
33use crate::units_of_work::insert_list_uow::InsertListUnitOfWorkFactory;
34use crate::units_of_work::insert_markdown_at_position_uow::InsertMarkdownAtPositionUnitOfWorkFactory;
35use crate::units_of_work::insert_text_uow::InsertTextUnitOfWorkFactory;
36use crate::use_cases::create_list_uc::CreateListUseCase;
37use crate::use_cases::delete_text_uc::DeleteTextUseCase;
38use crate::use_cases::insert_block_uc::InsertBlockUseCase;
39use crate::use_cases::insert_formatted_text_uc::InsertFormattedTextUseCase;
40use crate::use_cases::insert_fragment_uc::InsertFragmentUseCase;
41use crate::use_cases::insert_frame_uc::InsertFrameUseCase;
42use crate::use_cases::insert_html_at_position_uc::InsertHtmlAtPositionUseCase;
43use crate::use_cases::insert_image_uc::InsertImageUseCase;
44use crate::use_cases::insert_list_uc::InsertListUseCase;
45use crate::use_cases::insert_markdown_at_position_uc::InsertMarkdownAtPositionUseCase;
46use crate::use_cases::insert_text_uc::InsertTextUseCase;
47use anyhow::Result;
48use common::event::{Event, Origin};
49
50use common::event::DocumentEditingEvent::CreateList;
51use common::event::DocumentEditingEvent::DeleteText;
52use common::event::DocumentEditingEvent::InsertBlock;
53use common::event::DocumentEditingEvent::InsertFormattedText;
54use common::event::DocumentEditingEvent::InsertFragment;
55use common::event::DocumentEditingEvent::InsertFrame;
56use common::event::DocumentEditingEvent::InsertHtmlAtPosition;
57use common::event::DocumentEditingEvent::InsertImage;
58use common::event::DocumentEditingEvent::InsertList;
59use common::event::DocumentEditingEvent::InsertMarkdownAtPosition;
60use common::event::DocumentEditingEvent::InsertText;
61
62use common::undo_redo::UndoRedoManager;
63use common::{database::db_context::DbContext, event::EventHub};
64use std::sync::Arc;
65
66pub fn insert_text(
67 db_context: &DbContext,
68 event_hub: &Arc<EventHub>,
69 undo_redo_manager: &mut UndoRedoManager,
70 stack_id: Option<u64>,
71 dto: &InsertTextDto,
72) -> Result<InsertTextResultDto> {
73 let uow_context = InsertTextUnitOfWorkFactory::new(db_context, event_hub);
74 let mut uc = InsertTextUseCase::new(Box::new(uow_context));
75 let return_dto = uc.execute(dto)?;
76 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
77 event_hub.send_event(Event {
79 origin: Origin::DocumentEditing(InsertText),
80 ids: vec![],
81 data: None,
82 });
83 Ok(return_dto)
84}
85
86pub fn delete_text(
87 db_context: &DbContext,
88 event_hub: &Arc<EventHub>,
89 undo_redo_manager: &mut UndoRedoManager,
90 stack_id: Option<u64>,
91 dto: &DeleteTextDto,
92) -> Result<DeleteTextResultDto> {
93 let uow_context = DeleteTextUnitOfWorkFactory::new(db_context, event_hub);
94 let mut uc = DeleteTextUseCase::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::DocumentEditing(DeleteText),
100 ids: vec![],
101 data: None,
102 });
103 Ok(return_dto)
104}
105
106pub fn insert_block(
107 db_context: &DbContext,
108 event_hub: &Arc<EventHub>,
109 undo_redo_manager: &mut UndoRedoManager,
110 stack_id: Option<u64>,
111 dto: &InsertBlockDto,
112) -> Result<InsertBlockResultDto> {
113 let uow_context = InsertBlockUnitOfWorkFactory::new(db_context, event_hub);
114 let mut uc = InsertBlockUseCase::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 {
119 origin: Origin::DocumentEditing(InsertBlock),
120 ids: vec![],
121 data: None,
122 });
123 Ok(return_dto)
124}
125
126pub fn insert_image(
127 db_context: &DbContext,
128 event_hub: &Arc<EventHub>,
129 undo_redo_manager: &mut UndoRedoManager,
130 stack_id: Option<u64>,
131 dto: &InsertImageDto,
132) -> Result<InsertImageResultDto> {
133 let uow_context = InsertImageUnitOfWorkFactory::new(db_context, event_hub);
134 let mut uc = InsertImageUseCase::new(Box::new(uow_context));
135 let return_dto = uc.execute(dto)?;
136 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
137 event_hub.send_event(Event {
139 origin: Origin::DocumentEditing(InsertImage),
140 ids: vec![],
141 data: None,
142 });
143 Ok(return_dto)
144}
145
146pub fn insert_frame(
147 db_context: &DbContext,
148 event_hub: &Arc<EventHub>,
149 undo_redo_manager: &mut UndoRedoManager,
150 stack_id: Option<u64>,
151 dto: &InsertFrameDto,
152) -> Result<InsertFrameResultDto> {
153 let uow_context = InsertFrameUnitOfWorkFactory::new(db_context, event_hub);
154 let mut uc = InsertFrameUseCase::new(Box::new(uow_context));
155 let return_dto = uc.execute(dto)?;
156 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
157 event_hub.send_event(Event {
159 origin: Origin::DocumentEditing(InsertFrame),
160 ids: vec![],
161 data: None,
162 });
163 Ok(return_dto)
164}
165
166pub fn insert_formatted_text(
167 db_context: &DbContext,
168 event_hub: &Arc<EventHub>,
169 undo_redo_manager: &mut UndoRedoManager,
170 stack_id: Option<u64>,
171 dto: &InsertFormattedTextDto,
172) -> Result<InsertFormattedTextResultDto> {
173 let uow_context = InsertFormattedTextUnitOfWorkFactory::new(db_context, event_hub);
174 let mut uc = InsertFormattedTextUseCase::new(Box::new(uow_context));
175 let return_dto = uc.execute(dto)?;
176 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
177 event_hub.send_event(Event {
179 origin: Origin::DocumentEditing(InsertFormattedText),
180 ids: vec![],
181 data: None,
182 });
183 Ok(return_dto)
184}
185
186pub fn create_list(
187 db_context: &DbContext,
188 event_hub: &Arc<EventHub>,
189 undo_redo_manager: &mut UndoRedoManager,
190 stack_id: Option<u64>,
191 dto: &CreateListDto,
192) -> Result<CreateListResultDto> {
193 let uow_context = CreateListUnitOfWorkFactory::new(db_context, event_hub);
194 let mut uc = CreateListUseCase::new(Box::new(uow_context));
195 let return_dto = uc.execute(dto)?;
196 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
197 event_hub.send_event(Event {
199 origin: Origin::DocumentEditing(CreateList),
200 ids: vec![],
201 data: None,
202 });
203 Ok(return_dto)
204}
205
206pub fn insert_list(
207 db_context: &DbContext,
208 event_hub: &Arc<EventHub>,
209 undo_redo_manager: &mut UndoRedoManager,
210 stack_id: Option<u64>,
211 dto: &InsertListDto,
212) -> Result<InsertListResultDto> {
213 let uow_context = InsertListUnitOfWorkFactory::new(db_context, event_hub);
214 let mut uc = InsertListUseCase::new(Box::new(uow_context));
215 let return_dto = uc.execute(dto)?;
216 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
217 event_hub.send_event(Event {
219 origin: Origin::DocumentEditing(InsertList),
220 ids: vec![],
221 data: None,
222 });
223 Ok(return_dto)
224}
225
226pub fn insert_fragment(
227 db_context: &DbContext,
228 event_hub: &Arc<EventHub>,
229 undo_redo_manager: &mut UndoRedoManager,
230 stack_id: Option<u64>,
231 dto: &InsertFragmentDto,
232) -> Result<InsertFragmentResultDto> {
233 let uow_context = InsertFragmentUnitOfWorkFactory::new(db_context, event_hub);
234 let mut uc = InsertFragmentUseCase::new(Box::new(uow_context));
235 let return_dto = uc.execute(dto)?;
236 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
237 event_hub.send_event(Event {
239 origin: Origin::DocumentEditing(InsertFragment),
240 ids: vec![],
241 data: None,
242 });
243 Ok(return_dto)
244}
245
246pub fn insert_html_at_position(
247 db_context: &DbContext,
248 event_hub: &Arc<EventHub>,
249 undo_redo_manager: &mut UndoRedoManager,
250 stack_id: Option<u64>,
251 dto: &InsertHtmlAtPositionDto,
252) -> Result<InsertHtmlAtPositionResultDto> {
253 let uow_context = InsertHtmlAtPositionUnitOfWorkFactory::new(db_context, event_hub);
254 let mut uc = InsertHtmlAtPositionUseCase::new(Box::new(uow_context));
255 let return_dto = uc.execute(dto)?;
256 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
257 event_hub.send_event(Event {
259 origin: Origin::DocumentEditing(InsertHtmlAtPosition),
260 ids: vec![],
261 data: None,
262 });
263 Ok(return_dto)
264}
265
266pub fn insert_markdown_at_position(
267 db_context: &DbContext,
268 event_hub: &Arc<EventHub>,
269 undo_redo_manager: &mut UndoRedoManager,
270 stack_id: Option<u64>,
271 dto: &InsertMarkdownAtPositionDto,
272) -> Result<InsertMarkdownAtPositionResultDto> {
273 let uow_context = InsertMarkdownAtPositionUnitOfWorkFactory::new(db_context, event_hub);
274 let mut uc = InsertMarkdownAtPositionUseCase::new(Box::new(uow_context));
275 let return_dto = uc.execute(dto)?;
276 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
277 event_hub.send_event(Event {
279 origin: Origin::DocumentEditing(InsertMarkdownAtPosition),
280 ids: vec![],
281 data: None,
282 });
283 Ok(return_dto)
284}