event_map.rs 6.3 KB

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