event_map.rs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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::UpdateViewInfo, update_view_info_handler)
  60. .event(FolderEvent::DeleteView, delete_view_handler)
  61. .event(FolderEvent::DuplicateView, duplicate_view_handler)
  62. .event(FolderEvent::SetLatestView, set_latest_view_handler)
  63. .event(FolderEvent::CloseView, close_view_handler)
  64. .event(FolderEvent::MoveFolderItem, move_item_handler);
  65. // Trash
  66. module = module
  67. .event(FolderEvent::ReadTrash, read_trash_handler)
  68. .event(FolderEvent::PutbackTrash, putback_trash_handler)
  69. .event(FolderEvent::DeleteTrash, delete_trash_handler)
  70. .event(FolderEvent::RestoreAllTrash, restore_all_trash_handler)
  71. .event(FolderEvent::DeleteAllTrash, delete_all_trash_handler);
  72. module
  73. }
  74. #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
  75. #[event_err = "FlowyError"]
  76. pub enum FolderEvent {
  77. #[event(input = "CreateWorkspacePayload", output = "Workspace")]
  78. CreateWorkspace = 0,
  79. #[event(output = "CurrentWorkspaceSetting")]
  80. ReadCurWorkspace = 1,
  81. #[event(input = "WorkspaceId", output = "RepeatedWorkspace")]
  82. ReadWorkspaces = 2,
  83. #[event(input = "WorkspaceId")]
  84. DeleteWorkspace = 3,
  85. #[event(input = "WorkspaceId", output = "Workspace")]
  86. OpenWorkspace = 4,
  87. #[event(input = "WorkspaceId", output = "RepeatedApp")]
  88. ReadWorkspaceApps = 5,
  89. #[event(input = "CreateAppPayload", output = "App")]
  90. CreateApp = 101,
  91. #[event(input = "AppId")]
  92. DeleteApp = 102,
  93. #[event(input = "AppId", output = "App")]
  94. ReadApp = 103,
  95. #[event(input = "UpdateAppPayload")]
  96. UpdateApp = 104,
  97. #[event(input = "CreateViewPayload", output = "View")]
  98. CreateView = 201,
  99. #[event(input = "ViewId", output = "View")]
  100. ReadView = 202,
  101. #[event(input = "UpdateViewPayload", output = "View")]
  102. UpdateView = 203,
  103. #[event(input = "RepeatedViewId")]
  104. DeleteView = 204,
  105. #[event(input = "ViewId")]
  106. DuplicateView = 205,
  107. #[event(input = "ViewId")]
  108. CloseView = 206,
  109. #[event(input = "ViewId", output = "ViewInfo")]
  110. ReadViewInfo = 207,
  111. #[event(input = "UpdateViewInfoPayload", output = "ViewInfo")]
  112. UpdateViewInfo = 208,
  113. #[event()]
  114. CopyLink = 220,
  115. #[event(input = "ViewId")]
  116. SetLatestView = 221,
  117. #[event(input = "MoveFolderItemPayload")]
  118. MoveFolderItem = 230,
  119. #[event(output = "RepeatedTrash")]
  120. ReadTrash = 300,
  121. #[event(input = "TrashId")]
  122. PutbackTrash = 301,
  123. #[event(input = "RepeatedTrashId")]
  124. DeleteTrash = 302,
  125. #[event()]
  126. RestoreAllTrash = 303,
  127. #[event()]
  128. DeleteAllTrash = 304,
  129. }
  130. pub trait FolderCouldServiceV1: Send + Sync {
  131. fn init(&self);
  132. // Workspace
  133. fn create_workspace(
  134. &self,
  135. token: &str,
  136. params: CreateWorkspaceParams,
  137. ) -> FutureResult<WorkspaceRevision, FlowyError>;
  138. fn read_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<Vec<WorkspaceRevision>, FlowyError>;
  139. fn update_workspace(&self, token: &str, params: UpdateWorkspaceParams) -> FutureResult<(), FlowyError>;
  140. fn delete_workspace(&self, token: &str, params: WorkspaceId) -> FutureResult<(), FlowyError>;
  141. // View
  142. fn create_view(&self, token: &str, params: CreateViewParams) -> FutureResult<ViewRevision, FlowyError>;
  143. fn read_view(&self, token: &str, params: ViewId) -> FutureResult<Option<ViewRevision>, FlowyError>;
  144. fn delete_view(&self, token: &str, params: RepeatedViewId) -> FutureResult<(), FlowyError>;
  145. fn update_view(&self, token: &str, params: UpdateViewParams) -> FutureResult<(), FlowyError>;
  146. // App
  147. fn create_app(&self, token: &str, params: CreateAppParams) -> FutureResult<AppRevision, FlowyError>;
  148. fn read_app(&self, token: &str, params: AppId) -> FutureResult<Option<AppRevision>, FlowyError>;
  149. fn update_app(&self, token: &str, params: UpdateAppParams) -> FutureResult<(), FlowyError>;
  150. fn delete_app(&self, token: &str, params: AppId) -> FutureResult<(), FlowyError>;
  151. // Trash
  152. fn create_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  153. fn delete_trash(&self, token: &str, params: RepeatedTrashId) -> FutureResult<(), FlowyError>;
  154. fn read_trash(&self, token: &str) -> FutureResult<Vec<TrashRevision>, FlowyError>;
  155. }