event_map.rs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. use crate::{
  2. controller::FolderManager,
  3. entities::{
  4. app::{App, AppId, CreateAppParams, UpdateAppParams},
  5. trash::{RepeatedTrash, RepeatedTrashId},
  6. view::{CreateViewParams, RepeatedViewId, UpdateViewParams, View, ViewId},
  7. workspace::{CreateWorkspaceParams, RepeatedWorkspace, UpdateWorkspaceParams, Workspace, WorkspaceId},
  8. },
  9. errors::FlowyError,
  10. services::{app::event_handler::*, trash::event_handler::*, view::event_handler::*, workspace::event_handler::*},
  11. };
  12. use flowy_database::DBConnection;
  13. use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
  14. use strum_macros::Display;
  15. use lib_dispatch::prelude::*;
  16. use lib_infra::future::FutureResult;
  17. use lib_sqlite::ConnectionPool;
  18. use std::sync::Arc;
  19. pub trait WorkspaceDeps: WorkspaceUser + WorkspaceDatabase {}
  20. pub trait WorkspaceUser: Send + Sync {
  21. fn user_id(&self) -> Result<String, FlowyError>;
  22. fn token(&self) -> Result<String, FlowyError>;
  23. }
  24. pub trait WorkspaceDatabase: Send + Sync {
  25. fn db_pool(&self) -> Result<Arc<ConnectionPool>, FlowyError>;
  26. fn db_connection(&self) -> Result<DBConnection, FlowyError> {
  27. let pool = self.db_pool()?;
  28. let conn = pool.get().map_err(|e| FlowyError::internal().context(e))?;
  29. Ok(conn)
  30. }
  31. }
  32. pub fn create(folder: Arc<FolderManager>) -> Module {
  33. let mut module = Module::new()
  34. .name("Flowy-Workspace")
  35. .data(folder.workspace_controller.clone())
  36. .data(folder.app_controller.clone())
  37. .data(folder.view_controller.clone())
  38. .data(folder.trash_controller.clone())
  39. .data(folder.clone());
  40. module = module
  41. .event(FolderEvent::CreateWorkspace, create_workspace_handler)
  42. .event(FolderEvent::ReadCurWorkspace, read_cur_workspace_handler)
  43. .event(FolderEvent::ReadWorkspaces, read_workspaces_handler)
  44. .event(FolderEvent::OpenWorkspace, open_workspace_handler)
  45. .event(FolderEvent::ReadWorkspaceApps, read_workspace_apps_handler);
  46. module = module
  47. .event(FolderEvent::CreateApp, create_app_handler)
  48. .event(FolderEvent::ReadApp, read_app_handler)
  49. .event(FolderEvent::UpdateApp, update_app_handler)
  50. .event(FolderEvent::DeleteApp, delete_app_handler);
  51. module = module
  52. .event(FolderEvent::CreateView, create_view_handler)
  53. .event(FolderEvent::ReadView, read_view_handler)
  54. .event(FolderEvent::UpdateView, update_view_handler)
  55. .event(FolderEvent::DeleteView, delete_view_handler)
  56. .event(FolderEvent::DuplicateView, duplicate_view_handler)
  57. .event(FolderEvent::OpenView, open_view_handler)
  58. .event(FolderEvent::CloseView, close_view_handler)
  59. .event(FolderEvent::ApplyDocDelta, block_delta_handler);
  60. module = module
  61. .event(FolderEvent::ReadTrash, read_trash_handler)
  62. .event(FolderEvent::PutbackTrash, putback_trash_handler)
  63. .event(FolderEvent::DeleteTrash, delete_trash_handler)
  64. .event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
  65. .event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
  66. module = module.event(FolderEvent::ExportDocument, export_handler);
  67. module
  68. }
  69. #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
  70. #[event_err = "FlowyError"]
  71. pub enum FolderEvent {
  72. #[event(input = "CreateWorkspacePayload", output = "Workspace")]
  73. CreateWorkspace = 0,
  74. #[event(output = "CurrentWorkspaceSetting")]
  75. ReadCurWorkspace = 1,
  76. #[event(input = "WorkspaceId", output = "RepeatedWorkspace")]
  77. ReadWorkspaces = 2,
  78. #[event(input = "WorkspaceId")]
  79. DeleteWorkspace = 3,
  80. #[event(input = "WorkspaceId", output = "Workspace")]
  81. OpenWorkspace = 4,
  82. #[event(input = "WorkspaceId", output = "RepeatedApp")]
  83. ReadWorkspaceApps = 5,
  84. #[event(input = "CreateAppPayload", output = "App")]
  85. CreateApp = 101,
  86. #[event(input = "AppId")]
  87. DeleteApp = 102,
  88. #[event(input = "AppId", output = "App")]
  89. ReadApp = 103,
  90. #[event(input = "UpdateAppPayload")]
  91. UpdateApp = 104,
  92. #[event(input = "CreateViewPayload", output = "View")]
  93. CreateView = 201,
  94. #[event(input = "ViewId", output = "View")]
  95. ReadView = 202,
  96. #[event(input = "UpdateViewPayload", output = "View")]
  97. UpdateView = 203,
  98. #[event(input = "RepeatedViewId")]
  99. DeleteView = 204,
  100. #[event(input = "ViewId")]
  101. DuplicateView = 205,
  102. #[event()]
  103. CopyLink = 206,
  104. #[event(input = "ViewId", output = "BlockDelta")]
  105. OpenView = 207,
  106. #[event(input = "ViewId")]
  107. CloseView = 208,
  108. #[event(output = "RepeatedTrash")]
  109. ReadTrash = 300,
  110. #[event(input = "TrashId")]
  111. PutbackTrash = 301,
  112. #[event(input = "RepeatedTrashId")]
  113. DeleteTrash = 302,
  114. #[event()]
  115. RestoreAllTrash = 303,
  116. #[event()]
  117. DeleteAllTrash = 304,
  118. #[event(input = "BlockDelta", output = "BlockDelta")]
  119. ApplyDocDelta = 400,
  120. #[event(input = "ExportPayload", output = "ExportData")]
  121. ExportDocument = 500,
  122. }
  123. pub trait FolderCouldServiceV1: Send + Sync {
  124. fn init(&self);
  125. // Workspace
  126. fn create_workspace(&self, token: &str, params: CreateWorkspaceParams) -> FutureResult<Workspace, FlowyError>;
  127. fn read_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<RepeatedWorkspace, FlowyError>;
  128. fn update_workspace(&self, token: &str, params: UpdateWorkspaceParams) -> FutureResult<(), FlowyError>;
  129. fn delete_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<(), FlowyError>;
  130. // View
  131. fn create_view(&self, token: &str, params: CreateViewParams) -> FutureResult<View, FlowyError>;
  132. fn read_view(&self, token: &str, params: ViewId) -> FutureResult<Option<View>, FlowyError>;
  133. fn delete_view(&self, token: &str, params: RepeatedViewId) -> FutureResult<(), FlowyError>;
  134. fn update_view(&self, token: &str, params: UpdateViewParams) -> FutureResult<(), FlowyError>;
  135. // App
  136. fn create_app(&self, token: &str, params: CreateAppParams) -> FutureResult<App, FlowyError>;
  137. fn read_app(&self, token: &str, params: AppId) -> FutureResult<Option<App>, FlowyError>;
  138. fn update_app(&self, token: &str, params: UpdateAppParams) -> FutureResult<(), FlowyError>;
  139. fn delete_app(&self, token: &str, params: AppId) -> FutureResult<(), FlowyError>;
  140. // Trash
  141. fn create_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  142. fn delete_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  143. fn read_trash(&self, token: &str) -> FutureResult<RepeatedTrash, FlowyError>;
  144. }