use crate::{ entities::doc::{CreateDocParams, Doc, DocChangeset, QueryDocParams}, errors::DocError, services::{doc_controller::DocController, server::construct_doc_server, ws::WsManager}, }; use bytes::Bytes; use diesel::SqliteConnection; use flowy_database::ConnectionPool; use parking_lot::RwLock; use std::sync::Arc; pub trait DocumentUser: Send + Sync { fn user_dir(&self) -> Result; fn user_id(&self) -> Result; fn token(&self) -> Result; } pub struct FlowyDocument { controller: Arc, } impl FlowyDocument { pub fn new(user: Arc, ws_manager: Arc>) -> FlowyDocument { let server = construct_doc_server(); let controller = Arc::new(DocController::new(server.clone(), user.clone(), ws_manager.clone())); Self { controller } } pub fn create(&self, params: CreateDocParams, conn: &SqliteConnection) -> Result<(), DocError> { let _ = self.controller.create(params, conn)?; Ok(()) } pub fn delete(&self, params: QueryDocParams, conn: &SqliteConnection) -> Result<(), DocError> { let _ = self.controller.delete(params, conn)?; Ok(()) } pub async fn open(&self, params: QueryDocParams, pool: Arc) -> Result { let open_doc = self.controller.open(params, pool).await?; Ok(open_doc.doc()) } pub async fn apply_changeset(&self, params: DocChangeset, pool: Arc) -> Result { // let _ = self.doc_manager.apply_changeset(¶ms.id, // Bytes::from(params.data), pool).await?; // // // workaround: compare the rust's delta with flutter's delta. Will be removed // // very soon // let doc = self.doc_manager.read_doc(¶ms.id)?; // Ok(doc) unimplemented!() } }