2023-05-21 18:53:59 +08:00
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
use parking_lot::RwLock;
|
|
|
|
use tokio::sync::mpsc;
|
|
|
|
|
2023-07-29 09:46:24 +08:00
|
|
|
use flowy_database_deps::cloud::DatabaseCloudService;
|
|
|
|
use flowy_document_deps::cloud::DocumentCloudService;
|
2023-07-14 13:37:13 +08:00
|
|
|
use flowy_error::FlowyError;
|
2023-07-29 09:46:24 +08:00
|
|
|
use flowy_folder_deps::cloud::FolderCloudService;
|
2023-09-01 22:27:29 +08:00
|
|
|
use flowy_storage::FileStorageService;
|
2023-07-29 09:46:24 +08:00
|
|
|
// use flowy_user::services::database::{
|
|
|
|
// get_user_profile, get_user_workspace, open_collab_db, open_user_db,
|
|
|
|
// };
|
2023-08-24 14:00:34 +08:00
|
|
|
use flowy_user_deps::cloud::UserCloudService;
|
2023-07-29 09:46:24 +08:00
|
|
|
use flowy_user_deps::entities::*;
|
2023-05-21 18:53:59 +08:00
|
|
|
|
2023-05-23 23:55:21 +08:00
|
|
|
use crate::local_server::impls::{
|
2023-07-05 20:57:09 +08:00
|
|
|
LocalServerDatabaseCloudServiceImpl, LocalServerDocumentCloudServiceImpl,
|
2023-05-23 23:55:21 +08:00
|
|
|
LocalServerFolderCloudServiceImpl, LocalServerUserAuthServiceImpl,
|
|
|
|
};
|
2023-05-21 18:53:59 +08:00
|
|
|
use crate::AppFlowyServer;
|
|
|
|
|
2023-07-14 13:37:13 +08:00
|
|
|
pub trait LocalServerDB: Send + Sync + 'static {
|
2023-10-24 23:13:51 +08:00
|
|
|
fn get_user_profile(&self, uid: i64) -> Result<UserProfile, FlowyError>;
|
2023-07-29 09:46:24 +08:00
|
|
|
fn get_user_workspace(&self, uid: i64) -> Result<Option<UserWorkspace>, FlowyError>;
|
2023-07-14 13:37:13 +08:00
|
|
|
}
|
|
|
|
|
2023-05-21 18:53:59 +08:00
|
|
|
pub struct LocalServer {
|
2023-07-29 09:46:24 +08:00
|
|
|
local_db: Arc<dyn LocalServerDB>,
|
2023-05-21 18:53:59 +08:00
|
|
|
stop_tx: RwLock<Option<mpsc::Sender<()>>>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl LocalServer {
|
2023-07-29 09:46:24 +08:00
|
|
|
pub fn new(local_db: Arc<dyn LocalServerDB>) -> Self {
|
2023-07-14 13:37:13 +08:00
|
|
|
Self {
|
2023-07-29 09:46:24 +08:00
|
|
|
local_db,
|
2023-07-14 13:37:13 +08:00
|
|
|
stop_tx: Default::default(),
|
|
|
|
}
|
2023-05-21 18:53:59 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn stop(&self) {
|
|
|
|
let sender = self.stop_tx.read().clone();
|
|
|
|
if let Some(stop_tx) = sender {
|
|
|
|
let _ = stop_tx.send(()).await;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl AppFlowyServer for LocalServer {
|
2023-08-24 14:00:34 +08:00
|
|
|
fn user_service(&self) -> Arc<dyn UserCloudService> {
|
2023-07-29 09:46:24 +08:00
|
|
|
Arc::new(LocalServerUserAuthServiceImpl {
|
|
|
|
db: self.local_db.clone(),
|
|
|
|
})
|
2023-05-21 18:53:59 +08:00
|
|
|
}
|
2023-05-23 23:55:21 +08:00
|
|
|
|
|
|
|
fn folder_service(&self) -> Arc<dyn FolderCloudService> {
|
2023-07-29 09:46:24 +08:00
|
|
|
Arc::new(LocalServerFolderCloudServiceImpl {
|
|
|
|
db: self.local_db.clone(),
|
|
|
|
})
|
2023-05-23 23:55:21 +08:00
|
|
|
}
|
2023-07-05 20:57:09 +08:00
|
|
|
|
|
|
|
fn database_service(&self) -> Arc<dyn DatabaseCloudService> {
|
|
|
|
Arc::new(LocalServerDatabaseCloudServiceImpl())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn document_service(&self) -> Arc<dyn DocumentCloudService> {
|
|
|
|
Arc::new(LocalServerDocumentCloudServiceImpl())
|
|
|
|
}
|
|
|
|
|
2023-09-01 22:27:29 +08:00
|
|
|
fn file_storage(&self) -> Option<Arc<dyn FileStorageService>> {
|
|
|
|
None
|
|
|
|
}
|
2023-05-21 18:53:59 +08:00
|
|
|
}
|