use crate::errors::FlowyError; use backend_service::configuration::ClientServerConfiguration; use crate::{ controller::DocumentController, core::{DocumentWSReceivers, DocumentWebSocket}, server::construct_doc_server, }; 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(DocumentController::new(server, user.clone(), ws_receivers, ws_sender)); Self { controller: doc_ctrl, user, } } pub fn init(&self) -> Result<(), FlowyError> { let _ = self.controller.init()?; Ok(()) } }