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::InsertTableColumnDto;
24use crate::InsertTableColumnResultDto;
25use crate::InsertTableDto;
26use crate::InsertTableResultDto;
27use crate::InsertTableRowDto;
28use crate::InsertTableRowResultDto;
29use crate::InsertTextDto;
30use crate::InsertTextResultDto;
31use crate::MergeTableCellsDto;
32use crate::MergeTableCellsResultDto;
33use crate::RemoveTableColumnDto;
34use crate::RemoveTableColumnResultDto;
35use crate::RemoveTableDto;
36use crate::RemoveTableRowDto;
37use crate::RemoveTableRowResultDto;
38use crate::SplitTableCellDto;
39use crate::SplitTableCellResultDto;
40use crate::units_of_work::create_list_uow::CreateListUnitOfWorkFactory;
41use crate::units_of_work::delete_text_uow::DeleteTextUnitOfWorkFactory;
42use crate::units_of_work::insert_block_uow::InsertBlockUnitOfWorkFactory;
43use crate::units_of_work::insert_formatted_text_uow::InsertFormattedTextUnitOfWorkFactory;
44use crate::units_of_work::insert_fragment_uow::InsertFragmentUnitOfWorkFactory;
45use crate::units_of_work::insert_frame_uow::InsertFrameUnitOfWorkFactory;
46use crate::units_of_work::insert_html_at_position_uow::InsertHtmlAtPositionUnitOfWorkFactory;
47use crate::units_of_work::insert_image_uow::InsertImageUnitOfWorkFactory;
48use crate::units_of_work::insert_list_uow::InsertListUnitOfWorkFactory;
49use crate::units_of_work::insert_markdown_at_position_uow::InsertMarkdownAtPositionUnitOfWorkFactory;
50use crate::units_of_work::insert_table_column_uow::InsertTableColumnUnitOfWorkFactory;
51use crate::units_of_work::insert_table_row_uow::InsertTableRowUnitOfWorkFactory;
52use crate::units_of_work::insert_table_uow::InsertTableUnitOfWorkFactory;
53use crate::units_of_work::insert_text_uow::InsertTextUnitOfWorkFactory;
54use crate::units_of_work::merge_table_cells_uow::MergeTableCellsUnitOfWorkFactory;
55use crate::units_of_work::remove_table_column_uow::RemoveTableColumnUnitOfWorkFactory;
56use crate::units_of_work::remove_table_row_uow::RemoveTableRowUnitOfWorkFactory;
57use crate::units_of_work::remove_table_uow::RemoveTableUnitOfWorkFactory;
58use crate::units_of_work::split_table_cell_uow::SplitTableCellUnitOfWorkFactory;
59use crate::use_cases::create_list_uc::CreateListUseCase;
60use crate::use_cases::delete_text_uc::DeleteTextUseCase;
61use crate::use_cases::insert_block_uc::InsertBlockUseCase;
62use crate::use_cases::insert_formatted_text_uc::InsertFormattedTextUseCase;
63use crate::use_cases::insert_fragment_uc::InsertFragmentUseCase;
64use crate::use_cases::insert_frame_uc::InsertFrameUseCase;
65use crate::use_cases::insert_html_at_position_uc::InsertHtmlAtPositionUseCase;
66use crate::use_cases::insert_image_uc::InsertImageUseCase;
67use crate::use_cases::insert_list_uc::InsertListUseCase;
68use crate::use_cases::insert_markdown_at_position_uc::InsertMarkdownAtPositionUseCase;
69use crate::use_cases::insert_table_column_uc::InsertTableColumnUseCase;
70use crate::use_cases::insert_table_row_uc::InsertTableRowUseCase;
71use crate::use_cases::insert_table_uc::InsertTableUseCase;
72use crate::use_cases::insert_text_uc::InsertTextUseCase;
73use crate::use_cases::merge_table_cells_uc::MergeTableCellsUseCase;
74use crate::use_cases::remove_table_column_uc::RemoveTableColumnUseCase;
75use crate::use_cases::remove_table_row_uc::RemoveTableRowUseCase;
76use crate::use_cases::remove_table_uc::RemoveTableUseCase;
77use crate::use_cases::split_table_cell_uc::SplitTableCellUseCase;
78use anyhow::Result;
79use common::event::{Event, Origin};
80
81use common::event::DocumentEditingEvent::CreateList;
82use common::event::DocumentEditingEvent::DeleteText;
83use common::event::DocumentEditingEvent::InsertBlock;
84use common::event::DocumentEditingEvent::InsertFormattedText;
85use common::event::DocumentEditingEvent::InsertFragment;
86use common::event::DocumentEditingEvent::InsertFrame;
87use common::event::DocumentEditingEvent::InsertHtmlAtPosition;
88use common::event::DocumentEditingEvent::InsertImage;
89use common::event::DocumentEditingEvent::InsertList;
90use common::event::DocumentEditingEvent::InsertMarkdownAtPosition;
91use common::event::DocumentEditingEvent::InsertTable;
92use common::event::DocumentEditingEvent::InsertTableColumn;
93use common::event::DocumentEditingEvent::InsertTableRow;
94use common::event::DocumentEditingEvent::InsertText;
95use common::event::DocumentEditingEvent::MergeTableCells;
96use common::event::DocumentEditingEvent::RemoveTable;
97use common::event::DocumentEditingEvent::RemoveTableColumn;
98use common::event::DocumentEditingEvent::RemoveTableRow;
99use common::event::DocumentEditingEvent::SplitTableCell;
100
101use common::undo_redo::UndoRedoManager;
102use common::{database::db_context::DbContext, event::EventHub};
103use std::sync::Arc;
104
105pub fn insert_text(
106 db_context: &DbContext,
107 event_hub: &Arc<EventHub>,
108 undo_redo_manager: &mut UndoRedoManager,
109 stack_id: Option<u64>,
110 dto: &InsertTextDto,
111) -> Result<InsertTextResultDto> {
112 let uow_context = InsertTextUnitOfWorkFactory::new(db_context, event_hub);
113 let mut uc = InsertTextUseCase::new(Box::new(uow_context));
114 let return_dto = uc.execute(dto)?;
115 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
116 event_hub.send_event(Event {
118 origin: Origin::DocumentEditing(InsertText),
119 ids: vec![],
120 data: None,
121 });
122 Ok(return_dto)
123}
124
125pub fn delete_text(
126 db_context: &DbContext,
127 event_hub: &Arc<EventHub>,
128 undo_redo_manager: &mut UndoRedoManager,
129 stack_id: Option<u64>,
130 dto: &DeleteTextDto,
131) -> Result<DeleteTextResultDto> {
132 let uow_context = DeleteTextUnitOfWorkFactory::new(db_context, event_hub);
133 let mut uc = DeleteTextUseCase::new(Box::new(uow_context));
134 let return_dto = uc.execute(dto)?;
135 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
136 event_hub.send_event(Event {
138 origin: Origin::DocumentEditing(DeleteText),
139 ids: vec![],
140 data: None,
141 });
142 Ok(return_dto)
143}
144
145pub fn insert_block(
146 db_context: &DbContext,
147 event_hub: &Arc<EventHub>,
148 undo_redo_manager: &mut UndoRedoManager,
149 stack_id: Option<u64>,
150 dto: &InsertBlockDto,
151) -> Result<InsertBlockResultDto> {
152 let uow_context = InsertBlockUnitOfWorkFactory::new(db_context, event_hub);
153 let mut uc = InsertBlockUseCase::new(Box::new(uow_context));
154 let return_dto = uc.execute(dto)?;
155 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
156 event_hub.send_event(Event {
158 origin: Origin::DocumentEditing(InsertBlock),
159 ids: vec![],
160 data: None,
161 });
162 Ok(return_dto)
163}
164
165pub fn insert_image(
166 db_context: &DbContext,
167 event_hub: &Arc<EventHub>,
168 undo_redo_manager: &mut UndoRedoManager,
169 stack_id: Option<u64>,
170 dto: &InsertImageDto,
171) -> Result<InsertImageResultDto> {
172 let uow_context = InsertImageUnitOfWorkFactory::new(db_context, event_hub);
173 let mut uc = InsertImageUseCase::new(Box::new(uow_context));
174 let return_dto = uc.execute(dto)?;
175 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
176 event_hub.send_event(Event {
178 origin: Origin::DocumentEditing(InsertImage),
179 ids: vec![],
180 data: None,
181 });
182 Ok(return_dto)
183}
184
185pub fn insert_frame(
186 db_context: &DbContext,
187 event_hub: &Arc<EventHub>,
188 undo_redo_manager: &mut UndoRedoManager,
189 stack_id: Option<u64>,
190 dto: &InsertFrameDto,
191) -> Result<InsertFrameResultDto> {
192 let uow_context = InsertFrameUnitOfWorkFactory::new(db_context, event_hub);
193 let mut uc = InsertFrameUseCase::new(Box::new(uow_context));
194 let return_dto = uc.execute(dto)?;
195 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
196 event_hub.send_event(Event {
198 origin: Origin::DocumentEditing(InsertFrame),
199 ids: vec![],
200 data: None,
201 });
202 Ok(return_dto)
203}
204
205pub fn insert_formatted_text(
206 db_context: &DbContext,
207 event_hub: &Arc<EventHub>,
208 undo_redo_manager: &mut UndoRedoManager,
209 stack_id: Option<u64>,
210 dto: &InsertFormattedTextDto,
211) -> Result<InsertFormattedTextResultDto> {
212 let uow_context = InsertFormattedTextUnitOfWorkFactory::new(db_context, event_hub);
213 let mut uc = InsertFormattedTextUseCase::new(Box::new(uow_context));
214 let return_dto = uc.execute(dto)?;
215 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
216 event_hub.send_event(Event {
218 origin: Origin::DocumentEditing(InsertFormattedText),
219 ids: vec![],
220 data: None,
221 });
222 Ok(return_dto)
223}
224
225pub fn create_list(
226 db_context: &DbContext,
227 event_hub: &Arc<EventHub>,
228 undo_redo_manager: &mut UndoRedoManager,
229 stack_id: Option<u64>,
230 dto: &CreateListDto,
231) -> Result<CreateListResultDto> {
232 let uow_context = CreateListUnitOfWorkFactory::new(db_context, event_hub);
233 let mut uc = CreateListUseCase::new(Box::new(uow_context));
234 let return_dto = uc.execute(dto)?;
235 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
236 event_hub.send_event(Event {
238 origin: Origin::DocumentEditing(CreateList),
239 ids: vec![],
240 data: None,
241 });
242 Ok(return_dto)
243}
244
245pub fn insert_list(
246 db_context: &DbContext,
247 event_hub: &Arc<EventHub>,
248 undo_redo_manager: &mut UndoRedoManager,
249 stack_id: Option<u64>,
250 dto: &InsertListDto,
251) -> Result<InsertListResultDto> {
252 let uow_context = InsertListUnitOfWorkFactory::new(db_context, event_hub);
253 let mut uc = InsertListUseCase::new(Box::new(uow_context));
254 let return_dto = uc.execute(dto)?;
255 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
256 event_hub.send_event(Event {
258 origin: Origin::DocumentEditing(InsertList),
259 ids: vec![],
260 data: None,
261 });
262 Ok(return_dto)
263}
264
265pub fn insert_fragment(
266 db_context: &DbContext,
267 event_hub: &Arc<EventHub>,
268 undo_redo_manager: &mut UndoRedoManager,
269 stack_id: Option<u64>,
270 dto: &InsertFragmentDto,
271) -> Result<InsertFragmentResultDto> {
272 let uow_context = InsertFragmentUnitOfWorkFactory::new(db_context, event_hub);
273 let mut uc = InsertFragmentUseCase::new(Box::new(uow_context));
274 let return_dto = uc.execute(dto)?;
275 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
276 event_hub.send_event(Event {
278 origin: Origin::DocumentEditing(InsertFragment),
279 ids: vec![],
280 data: None,
281 });
282 Ok(return_dto)
283}
284
285pub fn insert_html_at_position(
286 db_context: &DbContext,
287 event_hub: &Arc<EventHub>,
288 undo_redo_manager: &mut UndoRedoManager,
289 stack_id: Option<u64>,
290 dto: &InsertHtmlAtPositionDto,
291) -> Result<InsertHtmlAtPositionResultDto> {
292 let uow_context = InsertHtmlAtPositionUnitOfWorkFactory::new(db_context, event_hub);
293 let mut uc = InsertHtmlAtPositionUseCase::new(Box::new(uow_context));
294 let return_dto = uc.execute(dto)?;
295 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
296 event_hub.send_event(Event {
298 origin: Origin::DocumentEditing(InsertHtmlAtPosition),
299 ids: vec![],
300 data: None,
301 });
302 Ok(return_dto)
303}
304
305pub fn insert_markdown_at_position(
306 db_context: &DbContext,
307 event_hub: &Arc<EventHub>,
308 undo_redo_manager: &mut UndoRedoManager,
309 stack_id: Option<u64>,
310 dto: &InsertMarkdownAtPositionDto,
311) -> Result<InsertMarkdownAtPositionResultDto> {
312 let uow_context = InsertMarkdownAtPositionUnitOfWorkFactory::new(db_context, event_hub);
313 let mut uc = InsertMarkdownAtPositionUseCase::new(Box::new(uow_context));
314 let return_dto = uc.execute(dto)?;
315 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
316 event_hub.send_event(Event {
318 origin: Origin::DocumentEditing(InsertMarkdownAtPosition),
319 ids: vec![],
320 data: None,
321 });
322 Ok(return_dto)
323}
324
325pub fn insert_table(
326 db_context: &DbContext,
327 event_hub: &Arc<EventHub>,
328 undo_redo_manager: &mut UndoRedoManager,
329 stack_id: Option<u64>,
330 dto: &InsertTableDto,
331) -> Result<InsertTableResultDto> {
332 let uow_context = InsertTableUnitOfWorkFactory::new(db_context, event_hub);
333 let mut uc = InsertTableUseCase::new(Box::new(uow_context));
334 let return_dto = uc.execute(dto)?;
335 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
336 event_hub.send_event(Event {
338 origin: Origin::DocumentEditing(InsertTable),
339 ids: vec![],
340 data: None,
341 });
342 Ok(return_dto)
343}
344
345pub fn remove_table(
346 db_context: &DbContext,
347 event_hub: &Arc<EventHub>,
348 undo_redo_manager: &mut UndoRedoManager,
349 stack_id: Option<u64>,
350 dto: &RemoveTableDto,
351) -> Result<()> {
352 let uow_context = RemoveTableUnitOfWorkFactory::new(db_context, event_hub);
353 let mut uc = RemoveTableUseCase::new(Box::new(uow_context));
354 uc.execute(dto)?;
355 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
356 event_hub.send_event(Event {
358 origin: Origin::DocumentEditing(RemoveTable),
359 ids: vec![],
360 data: None,
361 });
362 Ok(())
363}
364
365pub fn insert_table_row(
366 db_context: &DbContext,
367 event_hub: &Arc<EventHub>,
368 undo_redo_manager: &mut UndoRedoManager,
369 stack_id: Option<u64>,
370 dto: &InsertTableRowDto,
371) -> Result<InsertTableRowResultDto> {
372 let uow_context = InsertTableRowUnitOfWorkFactory::new(db_context, event_hub);
373 let mut uc = InsertTableRowUseCase::new(Box::new(uow_context));
374 let return_dto = uc.execute(dto)?;
375 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
376 event_hub.send_event(Event {
378 origin: Origin::DocumentEditing(InsertTableRow),
379 ids: vec![],
380 data: None,
381 });
382 Ok(return_dto)
383}
384
385pub fn insert_table_column(
386 db_context: &DbContext,
387 event_hub: &Arc<EventHub>,
388 undo_redo_manager: &mut UndoRedoManager,
389 stack_id: Option<u64>,
390 dto: &InsertTableColumnDto,
391) -> Result<InsertTableColumnResultDto> {
392 let uow_context = InsertTableColumnUnitOfWorkFactory::new(db_context, event_hub);
393 let mut uc = InsertTableColumnUseCase::new(Box::new(uow_context));
394 let return_dto = uc.execute(dto)?;
395 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
396 event_hub.send_event(Event {
398 origin: Origin::DocumentEditing(InsertTableColumn),
399 ids: vec![],
400 data: None,
401 });
402 Ok(return_dto)
403}
404
405pub fn remove_table_row(
406 db_context: &DbContext,
407 event_hub: &Arc<EventHub>,
408 undo_redo_manager: &mut UndoRedoManager,
409 stack_id: Option<u64>,
410 dto: &RemoveTableRowDto,
411) -> Result<RemoveTableRowResultDto> {
412 let uow_context = RemoveTableRowUnitOfWorkFactory::new(db_context, event_hub);
413 let mut uc = RemoveTableRowUseCase::new(Box::new(uow_context));
414 let return_dto = uc.execute(dto)?;
415 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
416 event_hub.send_event(Event {
418 origin: Origin::DocumentEditing(RemoveTableRow),
419 ids: vec![],
420 data: None,
421 });
422 Ok(return_dto)
423}
424
425pub fn remove_table_column(
426 db_context: &DbContext,
427 event_hub: &Arc<EventHub>,
428 undo_redo_manager: &mut UndoRedoManager,
429 stack_id: Option<u64>,
430 dto: &RemoveTableColumnDto,
431) -> Result<RemoveTableColumnResultDto> {
432 let uow_context = RemoveTableColumnUnitOfWorkFactory::new(db_context, event_hub);
433 let mut uc = RemoveTableColumnUseCase::new(Box::new(uow_context));
434 let return_dto = uc.execute(dto)?;
435 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
436 event_hub.send_event(Event {
438 origin: Origin::DocumentEditing(RemoveTableColumn),
439 ids: vec![],
440 data: None,
441 });
442 Ok(return_dto)
443}
444
445pub fn merge_table_cells(
446 db_context: &DbContext,
447 event_hub: &Arc<EventHub>,
448 undo_redo_manager: &mut UndoRedoManager,
449 stack_id: Option<u64>,
450 dto: &MergeTableCellsDto,
451) -> Result<MergeTableCellsResultDto> {
452 let uow_context = MergeTableCellsUnitOfWorkFactory::new(db_context, event_hub);
453 let mut uc = MergeTableCellsUseCase::new(Box::new(uow_context));
454 let return_dto = uc.execute(dto)?;
455 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
456 event_hub.send_event(Event {
458 origin: Origin::DocumentEditing(MergeTableCells),
459 ids: vec![],
460 data: None,
461 });
462 Ok(return_dto)
463}
464
465pub fn split_table_cell(
466 db_context: &DbContext,
467 event_hub: &Arc<EventHub>,
468 undo_redo_manager: &mut UndoRedoManager,
469 stack_id: Option<u64>,
470 dto: &SplitTableCellDto,
471) -> Result<SplitTableCellResultDto> {
472 let uow_context = SplitTableCellUnitOfWorkFactory::new(db_context, event_hub);
473 let mut uc = SplitTableCellUseCase::new(Box::new(uow_context));
474 let return_dto = uc.execute(dto)?;
475 undo_redo_manager.add_command_to_stack(Box::new(uc), stack_id)?;
476 event_hub.send_event(Event {
478 origin: Origin::DocumentEditing(SplitTableCell),
479 ids: vec![],
480 data: None,
481 });
482 Ok(return_dto)
483}