module.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. use flowy_dispatch::prelude::Module;
  2. use flowy_user::prelude::*;
  3. use crate::flowy_server::{ArcFlowyServer, FlowyServerMocker};
  4. use flowy_database::DBConnection;
  5. use flowy_workspace::prelude::*;
  6. use std::sync::Arc;
  7. pub struct ModuleConfig {
  8. pub root: String,
  9. }
  10. pub fn build_modules(config: ModuleConfig, _server: ArcFlowyServer) -> Vec<Module> {
  11. let user_session = Arc::new(
  12. UserSessionBuilder::new()
  13. .root_dir(&config.root)
  14. .build(Arc::new(FlowyServerMocker {})),
  15. );
  16. let workspace_user_impl = Arc::new(WorkspaceUserImpl {
  17. user_session: user_session.clone(),
  18. });
  19. vec![
  20. flowy_user::module::create(user_session),
  21. flowy_workspace::module::create(workspace_user_impl),
  22. ]
  23. }
  24. pub struct WorkspaceUserImpl {
  25. user_session: Arc<UserSession>,
  26. }
  27. impl WorkspaceUser for WorkspaceUserImpl {
  28. fn set_current_workspace(&self, id: &str) { UserSession::set_current_workspace(id); }
  29. fn get_current_workspace(&self) -> Result<String, WorkspaceError> {
  30. let user_detail = self.user_session.user_detail().map_err(|e| {
  31. ErrorBuilder::new(WorkspaceErrorCode::UserNotLoginYet)
  32. .error(e)
  33. .build()
  34. })?;
  35. Ok(user_detail.id)
  36. }
  37. fn db_connection(&self) -> Result<DBConnection, WorkspaceError> {
  38. self.user_session.get_db_connection().map_err(|e| {
  39. ErrorBuilder::new(WorkspaceErrorCode::DatabaseConnectionFail)
  40. .error(e)
  41. .build()
  42. })
  43. }
  44. }