event_map.rs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. use crate::{
  2. entities::{
  3. app::{AppId, CreateAppParams, UpdateAppParams},
  4. trash::RepeatedTrashId,
  5. view::{CreateViewParams, RepeatedViewId, UpdateViewParams, ViewId},
  6. workspace::{CreateWorkspaceParams, UpdateWorkspaceParams, WorkspaceId},
  7. },
  8. errors::FlowyError,
  9. manager::FolderManager,
  10. services::{app::event_handler::*, trash::event_handler::*, view::event_handler::*, workspace::event_handler::*},
  11. };
  12. use flowy_database::{ConnectionPool, DBConnection};
  13. use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
  14. use flowy_folder_data_model::revision::{AppRevision, TrashRevision, ViewRevision, WorkspaceRevision};
  15. use lib_dispatch::prelude::*;
  16. use lib_infra::future::FutureResult;
  17. use std::sync::Arc;
  18. use strum_macros::Display;
  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. // Workspace
  41. module = module
  42. .event(FolderEvent::CreateWorkspace, create_workspace_handler)
  43. .event(FolderEvent::ReadCurWorkspace, read_cur_workspace_handler)
  44. .event(FolderEvent::ReadWorkspaces, read_workspaces_handler)
  45. .event(FolderEvent::OpenWorkspace, open_workspace_handler)
  46. .event(FolderEvent::ReadWorkspaceApps, read_workspace_apps_handler);
  47. // App
  48. module = module
  49. .event(FolderEvent::CreateApp, create_app_handler)
  50. .event(FolderEvent::ReadApp, read_app_handler)
  51. .event(FolderEvent::UpdateApp, update_app_handler)
  52. .event(FolderEvent::DeleteApp, delete_app_handler);
  53. // View
  54. module = module
  55. .event(FolderEvent::CreateView, create_view_handler)
  56. .event(FolderEvent::ReadView, read_view_handler)
  57. .event(FolderEvent::UpdateView, update_view_handler)
  58. .event(FolderEvent::ReadViewInfo, read_view_info_handler)
  59. .event(FolderEvent::DeleteView, delete_view_handler)
  60. .event(FolderEvent::DuplicateView, duplicate_view_handler)
  61. .event(FolderEvent::SetLatestView, set_latest_view_handler)
  62. .event(FolderEvent::CloseView, close_view_handler)
  63. .event(FolderEvent::MoveFolderItem, move_item_handler);
  64. // Trash
  65. module = module
  66. .event(FolderEvent::ReadTrash, read_trash_handler)
  67. .event(FolderEvent::PutbackTrash, putback_trash_handler)
  68. .event(FolderEvent::DeleteTrash, delete_trash_handler)
  69. .event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
  70. .event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
  71. module
  72. }
  73. #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
  74. #[event_err = "FlowyError"]
  75. pub enum FolderEvent {
  76. #[event(input = "CreateWorkspacePayload", output = "Workspace")]
  77. CreateWorkspace = 0,
  78. #[event(output = "CurrentWorkspaceSetting")]
  79. ReadCurWorkspace = 1,
  80. #[event(input = "WorkspaceId", output = "RepeatedWorkspace")]
  81. ReadWorkspaces = 2,
  82. #[event(input = "WorkspaceId")]
  83. DeleteWorkspace = 3,
  84. #[event(input = "WorkspaceId", output = "Workspace")]
  85. OpenWorkspace = 4,
  86. #[event(input = "WorkspaceId", output = "RepeatedApp")]
  87. ReadWorkspaceApps = 5,
  88. #[event(input = "CreateAppPayload", output = "App")]
  89. CreateApp = 101,
  90. #[event(input = "AppId")]
  91. DeleteApp = 102,
  92. #[event(input = "AppId", output = "App")]
  93. ReadApp = 103,
  94. #[event(input = "UpdateAppPayload")]
  95. UpdateApp = 104,
  96. #[event(input = "CreateViewPayload", output = "View")]
  97. CreateView = 201,
  98. #[event(input = "ViewId", output = "View")]
  99. ReadView = 202,
  100. #[event(input = "UpdateViewPayload", output = "View")]
  101. UpdateView = 203,
  102. #[event(input = "RepeatedViewId")]
  103. DeleteView = 204,
  104. #[event(input = "ViewId")]
  105. DuplicateView = 205,
  106. #[event(input = "ViewId")]
  107. CloseView = 206,
  108. #[event(input = "ViewId", output = "ViewInfo")]
  109. ReadViewInfo = 207,
  110. #[event()]
  111. CopyLink = 220,
  112. #[event(input = "ViewId")]
  113. SetLatestView = 221,
  114. #[event(input = "MoveFolderItemPayload")]
  115. MoveFolderItem = 230,
  116. #[event(output = "RepeatedTrash")]
  117. ReadTrash = 300,
  118. #[event(input = "TrashId")]
  119. PutbackTrash = 301,
  120. #[event(input = "RepeatedTrashId")]
  121. DeleteTrash = 302,
  122. #[event()]
  123. RestoreAllTrash = 303,
  124. #[event()]
  125. DeleteAllTrash = 304,
  126. }
  127. pub trait FolderCouldServiceV1: Send + Sync {
  128. fn init(&self);
  129. // Workspace
  130. fn create_workspace(
  131. &self,
  132. token: &str,
  133. params: CreateWorkspaceParams,
  134. ) -> FutureResult<WorkspaceRevision, FlowyError>;
  135. fn read_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<Vec<WorkspaceRevision>, FlowyError>;
  136. fn update_workspace(&self, token: &str, params: UpdateWorkspaceParams) -> FutureResult<(), FlowyError>;
  137. fn delete_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<(), FlowyError>;
  138. // View
  139. fn create_view(&self, token: &str, params: CreateViewParams) -> FutureResult<ViewRevision, FlowyError>;
  140. fn read_view(&self, token: &str, params: ViewId) -> FutureResult<Option<ViewRevision>, FlowyError>;
  141. fn delete_view(&self, token: &str, params: RepeatedViewId) -> FutureResult<(), FlowyError>;
  142. fn update_view(&self, token: &str, params: UpdateViewParams) -> FutureResult<(), FlowyError>;
  143. // App
  144. fn create_app(&self, token: &str, params: CreateAppParams) -> FutureResult<AppRevision, FlowyError>;
  145. fn read_app(&self, token: &str, params: AppId) -> FutureResult<Option<AppRevision>, FlowyError>;
  146. fn update_app(&self, token: &str, params: UpdateAppParams) -> FutureResult<(), FlowyError>;
  147. fn delete_app(&self, token: &str, params: AppId) -> FutureResult<(), FlowyError>;
  148. // Trash
  149. fn create_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  150. fn delete_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  151. fn read_trash(&self, token: &str) -> FutureResult<Vec<TrashRevision>, FlowyError>;
  152. }