mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
docs/update database documentation (#1824)
* chore: update event name * chore: add events and notifications documentation & remove unused code
This commit is contained in:
@ -61,7 +61,6 @@ impl AsRef<str> for FolderId {
|
||||
|
||||
pub struct FolderManager {
|
||||
pub user: Arc<dyn WorkspaceUser>,
|
||||
pub(crate) cloud_service: Arc<dyn FolderCouldServiceV1>,
|
||||
pub(crate) persistence: Arc<FolderPersistence>,
|
||||
pub(crate) workspace_controller: Arc<WorkspaceController>,
|
||||
pub(crate) app_controller: Arc<AppController>,
|
||||
@ -118,7 +117,6 @@ impl FolderManager {
|
||||
|
||||
Self {
|
||||
user,
|
||||
cloud_service,
|
||||
persistence,
|
||||
workspace_controller,
|
||||
app_controller,
|
||||
@ -249,7 +247,7 @@ impl DefaultFolderBuilder {
|
||||
let repeated_workspace = RepeatedWorkspacePB {
|
||||
items: vec![workspace_rev.into()],
|
||||
};
|
||||
send_notification(token, FolderNotification::UserCreateWorkspace)
|
||||
send_notification(token, FolderNotification::DidCreateWorkspace)
|
||||
.payload(repeated_workspace)
|
||||
.send();
|
||||
Ok(())
|
||||
|
@ -5,19 +5,28 @@ const OBSERVABLE_CATEGORY: &str = "Workspace";
|
||||
#[derive(ProtoBuf_Enum, Debug)]
|
||||
pub(crate) enum FolderNotification {
|
||||
Unknown = 0,
|
||||
UserCreateWorkspace = 10,
|
||||
UserDeleteWorkspace = 11,
|
||||
WorkspaceUpdated = 12,
|
||||
WorkspaceListUpdated = 13,
|
||||
WorkspaceAppsChanged = 14,
|
||||
WorkspaceSetting = 15,
|
||||
AppUpdated = 21,
|
||||
ViewUpdated = 31,
|
||||
ViewDeleted = 32,
|
||||
ViewRestored = 33,
|
||||
ViewMoveToTrash = 34,
|
||||
UserUnauthorized = 100,
|
||||
TrashUpdated = 1000,
|
||||
/// Trigger after creating a workspace
|
||||
DidCreateWorkspace = 1,
|
||||
/// Trigger after deleting a workspace
|
||||
DidDeleteWorkspace = 2,
|
||||
/// Trigger after updating a workspace
|
||||
DidUpdateWorkspace = 3,
|
||||
/// Trigger when the number of apps of the workspace is changed
|
||||
DidUpdateWorkspaceApps = 4,
|
||||
/// Trigger when the settings of the workspace are changed. The changes including the latest visiting view, etc
|
||||
DidUpdateWorkspaceSetting = 5,
|
||||
/// Trigger when the properties including rename,update description of the app are changed
|
||||
DidUpdateApp = 20,
|
||||
/// Trigger when the properties including rename,update description of the view are changed
|
||||
DidUpdateView = 30,
|
||||
/// Trigger after deleting the view
|
||||
DidDeleteView = 31,
|
||||
/// Trigger when restore the view from trash
|
||||
DidRestoreView = 32,
|
||||
/// Trigger after moving the view to trash
|
||||
DidMoveViewToTrash = 33,
|
||||
/// Trigger when the number of trash is changed
|
||||
DidUpdateTrash = 34,
|
||||
}
|
||||
|
||||
impl std::default::Default for FolderNotification {
|
||||
|
@ -72,7 +72,6 @@ impl AppController {
|
||||
Ok(Some(app))
|
||||
})
|
||||
.await?;
|
||||
self.read_app_on_server(params)?;
|
||||
Ok(app)
|
||||
}
|
||||
|
||||
@ -89,7 +88,7 @@ impl AppController {
|
||||
})
|
||||
.await?
|
||||
.into();
|
||||
send_notification(&app_id, FolderNotification::AppUpdated)
|
||||
send_notification(&app_id, FolderNotification::DidUpdateApp)
|
||||
.payload(app)
|
||||
.send();
|
||||
self.update_app_on_server(params)?;
|
||||
@ -147,34 +146,6 @@ impl AppController {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "trace", skip(self), err)]
|
||||
fn read_app_on_server(&self, params: AppIdPB) -> Result<(), FlowyError> {
|
||||
let token = self.user.token()?;
|
||||
let server = self.cloud_service.clone();
|
||||
let persistence = self.persistence.clone();
|
||||
tokio::spawn(async move {
|
||||
match server.read_app(&token, params).await {
|
||||
Ok(Some(app_rev)) => {
|
||||
match persistence
|
||||
.begin_transaction(|transaction| transaction.create_app(app_rev.clone()))
|
||||
.await
|
||||
{
|
||||
Ok(_) => {
|
||||
let app: AppPB = app_rev.into();
|
||||
send_notification(&app.id, FolderNotification::AppUpdated)
|
||||
.payload(app)
|
||||
.send();
|
||||
}
|
||||
Err(e) => log::error!("Save app failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
Ok(None) => {}
|
||||
Err(e) => log::error!("Read app failed: {:?}", e),
|
||||
}
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn listen_trash_controller_event(&self) {
|
||||
let mut rx = self.trash_controller.subscribe();
|
||||
let persistence = self.persistence.clone();
|
||||
@ -246,7 +217,7 @@ fn notify_apps_changed<'a>(
|
||||
.map(|app_rev| app_rev.into())
|
||||
.collect();
|
||||
let repeated_app = RepeatedAppPB { items };
|
||||
send_notification(workspace_id, FolderNotification::WorkspaceAppsChanged)
|
||||
send_notification(workspace_id, FolderNotification::DidUpdateWorkspaceApps)
|
||||
.payload(repeated_app)
|
||||
.send();
|
||||
Ok(())
|
||||
|
@ -206,7 +206,7 @@ impl TrashController {
|
||||
fn notify_trash_changed<T: Into<RepeatedTrashPB>>(repeated_trash: T) {
|
||||
let repeated_trash = repeated_trash.into();
|
||||
tracing::Span::current().record("n_trash", repeated_trash.len());
|
||||
send_anonymous_notification(FolderNotification::TrashUpdated)
|
||||
send_anonymous_notification(FolderNotification::DidUpdateTrash)
|
||||
.payload(repeated_trash)
|
||||
.send();
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use crate::manager::{ViewDataProcessor, ViewDataProcessorMap};
|
||||
use crate::{
|
||||
entities::{
|
||||
trash::{RepeatedTrashIdPB, TrashType},
|
||||
view::{CreateViewParams, UpdateViewParams, ViewIdPB, ViewPB},
|
||||
view::{CreateViewParams, UpdateViewParams, ViewPB},
|
||||
},
|
||||
errors::{FlowyError, FlowyResult},
|
||||
event_map::{FolderCouldServiceV1, WorkspaceUser},
|
||||
@ -194,7 +194,7 @@ impl ViewController {
|
||||
})
|
||||
.await?;
|
||||
|
||||
send_notification(view_id, FolderNotification::ViewMoveToTrash)
|
||||
send_notification(view_id, FolderNotification::DidMoveViewToTrash)
|
||||
.payload(deleted_view)
|
||||
.send();
|
||||
|
||||
@ -260,7 +260,7 @@ impl ViewController {
|
||||
transaction.update_view(changeset)?;
|
||||
let view_rev = transaction.read_view(&view_id)?;
|
||||
let view: ViewPB = view_rev.clone().into();
|
||||
send_notification(&view_id, FolderNotification::ViewUpdated)
|
||||
send_notification(&view_id, FolderNotification::DidUpdateView)
|
||||
.payload(view)
|
||||
.send();
|
||||
notify_views_changed(&view_rev.app_id, self.trash_controller.clone(), &transaction)?;
|
||||
@ -310,35 +310,6 @@ impl ViewController {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self), err)]
|
||||
fn read_view_on_server(&self, params: ViewIdPB) -> Result<(), FlowyError> {
|
||||
let token = self.user.token()?;
|
||||
let server = self.cloud_service.clone();
|
||||
let persistence = self.persistence.clone();
|
||||
// TODO: Retry with RetryAction?
|
||||
tokio::spawn(async move {
|
||||
match server.read_view(&token, params).await {
|
||||
Ok(Some(view_rev)) => {
|
||||
match persistence
|
||||
.begin_transaction(|transaction| transaction.create_view(view_rev.clone()))
|
||||
.await
|
||||
{
|
||||
Ok(_) => {
|
||||
let view: ViewPB = view_rev.into();
|
||||
send_notification(&view.id, FolderNotification::ViewUpdated)
|
||||
.payload(view)
|
||||
.send();
|
||||
}
|
||||
Err(e) => log::error!("Save view failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
Ok(None) => {}
|
||||
Err(e) => log::error!("Read view failed: {:?}", e),
|
||||
}
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn listen_trash_can_event(&self) {
|
||||
let mut rx = self.trash_controller.subscribe();
|
||||
let persistence = self.persistence.clone();
|
||||
@ -407,7 +378,7 @@ async fn handle_trash_event(
|
||||
let view_revs = read_local_views_with_transaction(identifiers, &transaction)?;
|
||||
for view_rev in view_revs {
|
||||
notify_views_changed(&view_rev.app_id, trash_can.clone(), &transaction)?;
|
||||
notify_dart(view_rev.into(), FolderNotification::ViewDeleted);
|
||||
notify_dart(view_rev.into(), FolderNotification::DidDeleteView);
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
@ -420,7 +391,7 @@ async fn handle_trash_event(
|
||||
let view_revs = read_local_views_with_transaction(identifiers, &transaction)?;
|
||||
for view_rev in view_revs {
|
||||
notify_views_changed(&view_rev.app_id, trash_can.clone(), &transaction)?;
|
||||
notify_dart(view_rev.into(), FolderNotification::ViewRestored);
|
||||
notify_dart(view_rev.into(), FolderNotification::DidRestoreView);
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
@ -506,7 +477,7 @@ fn notify_views_changed<'a>(
|
||||
app_rev.belongings.retain(|view| !trash_ids.contains(&view.id));
|
||||
let app: AppPB = app_rev.into();
|
||||
|
||||
send_notification(belong_to_id, FolderNotification::AppUpdated)
|
||||
send_notification(belong_to_id, FolderNotification::DidUpdateApp)
|
||||
.payload(app)
|
||||
.send();
|
||||
|
||||
|
@ -53,7 +53,7 @@ impl WorkspaceController {
|
||||
.map(|workspace_rev| workspace_rev.into())
|
||||
.collect();
|
||||
let repeated_workspace = RepeatedWorkspacePB { items: workspaces };
|
||||
send_notification(&token, FolderNotification::UserCreateWorkspace)
|
||||
send_notification(&token, FolderNotification::DidCreateWorkspace)
|
||||
.payload(repeated_workspace)
|
||||
.send();
|
||||
set_current_workspace(&user_id, &workspace.id);
|
||||
@ -73,7 +73,7 @@ impl WorkspaceController {
|
||||
})
|
||||
.await?;
|
||||
|
||||
send_notification(&workspace_id, FolderNotification::WorkspaceUpdated)
|
||||
send_notification(&workspace_id, FolderNotification::DidUpdateWorkspace)
|
||||
.payload(workspace)
|
||||
.send();
|
||||
self.update_workspace_on_server(params)?;
|
||||
@ -92,7 +92,7 @@ impl WorkspaceController {
|
||||
self.read_workspaces(None, &user_id, &transaction)
|
||||
})
|
||||
.await?;
|
||||
send_notification(&token, FolderNotification::UserDeleteWorkspace)
|
||||
send_notification(&token, FolderNotification::DidDeleteWorkspace)
|
||||
.payload(repeated_workspace)
|
||||
.send();
|
||||
self.delete_workspace_on_server(workspace_id)?;
|
||||
@ -236,7 +236,7 @@ pub async fn notify_workspace_setting_did_change(
|
||||
})
|
||||
.await?;
|
||||
|
||||
send_notification(&token, FolderNotification::WorkspaceSetting)
|
||||
send_notification(&token, FolderNotification::DidUpdateWorkspaceSetting)
|
||||
.payload(workspace_setting)
|
||||
.send();
|
||||
Ok(())
|
||||
|
@ -6,7 +6,6 @@ use crate::entities::{
|
||||
use crate::{
|
||||
errors::FlowyError,
|
||||
manager::FolderManager,
|
||||
notification::{send_notification, FolderNotification},
|
||||
services::{get_current_workspace, read_workspace_apps, WorkspaceController},
|
||||
};
|
||||
use lib_dispatch::prelude::{data_result, AFPluginData, AFPluginState, DataResult};
|
||||
@ -71,7 +70,6 @@ pub(crate) async fn read_workspaces_handler(
|
||||
Ok(workspaces)
|
||||
})
|
||||
.await?;
|
||||
let _ = read_workspaces_on_server(folder, user_id, params);
|
||||
data_result(workspaces)
|
||||
}
|
||||
|
||||
@ -81,10 +79,6 @@ pub async fn read_cur_workspace_handler(
|
||||
) -> DataResult<WorkspaceSettingPB, FlowyError> {
|
||||
let user_id = folder.user.user_id()?;
|
||||
let workspace_id = get_current_workspace(&user_id)?;
|
||||
let params = WorkspaceIdPB {
|
||||
value: Some(workspace_id.clone()),
|
||||
};
|
||||
|
||||
let workspace = folder
|
||||
.persistence
|
||||
.begin_transaction(|transaction| {
|
||||
@ -101,60 +95,5 @@ pub async fn read_cur_workspace_handler(
|
||||
.unwrap_or(None)
|
||||
.map(|view_rev| view_rev.into());
|
||||
let setting = WorkspaceSettingPB { workspace, latest_view };
|
||||
let _ = read_workspaces_on_server(folder, user_id, params);
|
||||
data_result(setting)
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "trace", skip(folder_manager), err)]
|
||||
fn read_workspaces_on_server(
|
||||
folder_manager: AFPluginState<Arc<FolderManager>>,
|
||||
user_id: String,
|
||||
params: WorkspaceIdPB,
|
||||
) -> Result<(), FlowyError> {
|
||||
let (token, server) = (folder_manager.user.token()?, folder_manager.cloud_service.clone());
|
||||
let persistence = folder_manager.persistence.clone();
|
||||
|
||||
tokio::spawn(async move {
|
||||
let workspace_revs = server.read_workspace(&token, params).await?;
|
||||
persistence
|
||||
.begin_transaction(|transaction| {
|
||||
for workspace_rev in &workspace_revs {
|
||||
let m_workspace = workspace_rev.clone();
|
||||
let app_revs = m_workspace.apps.clone();
|
||||
transaction.create_workspace(&user_id, m_workspace)?;
|
||||
tracing::trace!("Save {} apps", app_revs.len());
|
||||
for app_rev in app_revs {
|
||||
let view_revs = app_rev.belongings.clone();
|
||||
match transaction.create_app(app_rev) {
|
||||
Ok(_) => {}
|
||||
Err(e) => log::error!("create app failed: {:?}", e),
|
||||
}
|
||||
|
||||
tracing::trace!("Save {} views", view_revs.len());
|
||||
for view_rev in view_revs {
|
||||
match transaction.create_view(view_rev) {
|
||||
Ok(_) => {}
|
||||
Err(e) => log::error!("create view failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.await?;
|
||||
|
||||
let repeated_workspace = RepeatedWorkspacePB {
|
||||
items: workspace_revs
|
||||
.into_iter()
|
||||
.map(|workspace_rev| workspace_rev.into())
|
||||
.collect(),
|
||||
};
|
||||
|
||||
send_notification(&token, FolderNotification::WorkspaceListUpdated)
|
||||
.payload(repeated_workspace)
|
||||
.send();
|
||||
Result::<(), FlowyError>::Ok(())
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user