module.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. use flowy_dispatch::prelude::*;
  2. use crate::{
  3. errors::WorkspaceError,
  4. event::WorkspaceEvent,
  5. services::{AppController, WorkspaceController},
  6. };
  7. use flowy_database::DBConnection;
  8. use crate::{
  9. handlers::*,
  10. services::{server::construct_workspace_server, ViewController},
  11. };
  12. use std::sync::Arc;
  13. pub trait WorkspaceDeps: WorkspaceUser + WorkspaceDatabase {}
  14. pub trait WorkspaceUser: Send + Sync {
  15. fn user_id(&self) -> Result<String, WorkspaceError>;
  16. fn token(&self) -> Result<String, WorkspaceError>;
  17. }
  18. pub trait WorkspaceDatabase: Send + Sync {
  19. fn db_connection(&self) -> Result<DBConnection, WorkspaceError>;
  20. }
  21. pub fn create(user: Arc<dyn WorkspaceUser>, database: Arc<dyn WorkspaceDatabase>) -> Module {
  22. let server = construct_workspace_server();
  23. let view_controller = Arc::new(ViewController::new(user.clone(), database.clone(), server.clone()));
  24. let app_controller = Arc::new(AppController::new(user.clone(), database.clone(), server.clone()));
  25. let workspace_controller = Arc::new(WorkspaceController::new(
  26. user.clone(),
  27. database.clone(),
  28. app_controller.clone(),
  29. server.clone(),
  30. ));
  31. let mut module = Module::new()
  32. .name("Flowy-Workspace")
  33. .data(workspace_controller)
  34. .data(app_controller)
  35. .data(view_controller);
  36. module = module
  37. .event(WorkspaceEvent::CreateWorkspace, create_workspace_handler)
  38. .event(WorkspaceEvent::ReadCurWorkspace, read_cur_workspace_handler)
  39. .event(WorkspaceEvent::ReadWorkspaces, read_workspaces_handler)
  40. .event(WorkspaceEvent::OpenWorkspace, open_workspace_handler)
  41. .event(WorkspaceEvent::ReadWorkspaceApps, read_workspace_apps_handler);
  42. module = module
  43. .event(WorkspaceEvent::CreateApp, create_app_handler)
  44. .event(WorkspaceEvent::ReadApp, read_app_handler)
  45. .event(WorkspaceEvent::UpdateApp, update_app_handler)
  46. .event(WorkspaceEvent::DeleteApp, delete_app_handler);
  47. module = module
  48. .event(WorkspaceEvent::CreateView, create_view_handler)
  49. .event(WorkspaceEvent::ReadView, read_view_handler)
  50. .event(WorkspaceEvent::UpdateView, update_view_handler)
  51. .event(WorkspaceEvent::DeleteView, delete_view_handler);
  52. module
  53. }