use crate::{ errors::DocError, event::EditorEvent, handlers::*, services::{doc_controller::DocController, file_manager::FileManager, server::construct_doc_server}, }; use flowy_database::DBConnection; use flowy_dispatch::prelude::*; use std::sync::Arc; use tokio::sync::RwLock; pub trait DocumentDatabase: Send + Sync { fn db_connection(&self) -> Result; } pub trait DocumentUser: Send + Sync { fn user_doc_dir(&self) -> Result; fn user_id(&self) -> Result; fn token(&self) -> Result; } pub fn create(database: Arc, user: Arc) -> Module { let server = construct_doc_server(); let file_manager = RwLock::new(FileManager::new(user.clone())); let doc_controller = DocController::new(database, server.clone(), user.clone()); Module::new() .name("flowy-document") .data(file_manager) .data(doc_controller) .event(EditorEvent::CreateDoc, create_doc_handler) .event(EditorEvent::UpdateDoc, update_doc_handler) .event(EditorEvent::ReadDoc, read_doc_handler) .event(EditorEvent::DeleteDoc, delete_doc_handler) }