module.rs 1.0 KB

1234567891011121314151617181920212223242526272829
  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::{entities::workspace::UserWorkspace, handlers::*};
  9. use std::sync::Arc;
  10. pub trait WorkspaceUser: Send + Sync {
  11. fn set_cur_workspace_id(&self, id: &str) -> DispatchFuture<Result<(), WorkspaceError>>;
  12. fn get_cur_workspace(&self) -> DispatchFuture<Result<UserWorkspace, WorkspaceError>>;
  13. fn db_connection(&self) -> Result<DBConnection, WorkspaceError>;
  14. }
  15. pub fn create(user: Arc<dyn WorkspaceUser>) -> Module {
  16. let workspace_controller = Arc::new(WorkspaceController::new(user.clone()));
  17. let app_controller = Arc::new(AppController::new(user.clone()));
  18. Module::new()
  19. .name("Flowy-Workspace")
  20. .data(workspace_controller)
  21. .data(app_controller)
  22. .event(WorkspaceEvent::CreateWorkspace, create_workspace)
  23. .event(WorkspaceEvent::GetWorkspaceDetail, get_workspace_detail)
  24. }