event_map.rs 6.2 KB

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