use crate::{ errors::FlowyError, services::{ controller::DocController, doc::{edit::ClientDocEditor, DocumentWSReceivers, DocumentWebSocket}, server::construct_doc_server, }, }; use backend_service::configuration::ClientServerConfiguration; use flowy_collaboration::entities::doc::{DocIdentifier, DocumentDelta}; use flowy_database::ConnectionPool; use std::sync::Arc; pub trait DocumentUser: Send + Sync { fn user_dir(&self) -> Result; fn user_id(&self) -> Result; fn token(&self) -> Result; fn db_pool(&self) -> Result, FlowyError>; } pub struct DocumentContext { pub controller: Arc, pub user: Arc, } impl DocumentContext { pub fn new( user: Arc, ws_receivers: Arc, ws_sender: Arc, server_config: &ClientServerConfiguration, ) -> DocumentContext { let server = construct_doc_server(server_config); let doc_ctrl = Arc::new(DocController::new(server, user.clone(), ws_receivers, ws_sender)); Self { controller: doc_ctrl, user, } } pub fn init(&self) -> Result<(), FlowyError> { let _ = self.controller.init()?; Ok(()) } }