workspace_deps_impl.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. use flowy_database::DBConnection;
  2. use flowy_dispatch::prelude::DispatchFuture;
  3. use flowy_user::prelude::UserSession;
  4. use flowy_workspace::{
  5. entities::workspace::CurrentWorkspace,
  6. errors::{ErrorBuilder, WorkspaceError, WsErrCode},
  7. module::{WorkspaceDatabase, WorkspaceUser},
  8. };
  9. use std::sync::Arc;
  10. pub struct WorkspaceUserImpl {
  11. pub(crate) user_session: Arc<UserSession>,
  12. }
  13. impl WorkspaceUser for WorkspaceUserImpl {
  14. fn user_id(&self) -> Result<String, WorkspaceError> {
  15. self.user_session.get_user_id().map_err(|e| {
  16. ErrorBuilder::new(WsErrCode::UserInternalError)
  17. .error(e)
  18. .build()
  19. })
  20. }
  21. fn set_cur_workspace_id(
  22. &self,
  23. workspace_id: &str,
  24. ) -> DispatchFuture<Result<(), WorkspaceError>> {
  25. let user_session = self.user_session.clone();
  26. let workspace_id = workspace_id.to_owned();
  27. DispatchFuture {
  28. fut: Box::pin(async move {
  29. let _ = user_session
  30. .set_current_workspace(&workspace_id)
  31. .await
  32. .map_err(|e| {
  33. ErrorBuilder::new(WsErrCode::UserInternalError)
  34. .error(e)
  35. .build()
  36. })?;
  37. Ok(())
  38. }),
  39. }
  40. }
  41. fn get_cur_workspace(&self) -> DispatchFuture<Result<CurrentWorkspace, WorkspaceError>> {
  42. let user_session = self.user_session.clone();
  43. DispatchFuture {
  44. fut: Box::pin(async move {
  45. let user_detail = user_session.user_detail().map_err(|e| {
  46. ErrorBuilder::new(WsErrCode::UserNotLoginYet)
  47. .error(e)
  48. .build()
  49. })?;
  50. Ok(CurrentWorkspace {
  51. workspace_id: "".to_owned(),
  52. })
  53. }),
  54. }
  55. }
  56. }
  57. pub struct WorkspaceDatabaseImpl {
  58. pub(crate) user_session: Arc<UserSession>,
  59. }
  60. impl WorkspaceDatabase for WorkspaceDatabaseImpl {
  61. fn db_connection(&self) -> Result<DBConnection, WorkspaceError> {
  62. self.user_session.get_db_connection().map_err(|e| {
  63. ErrorBuilder::new(WsErrCode::DatabaseConnectionFail)
  64. .error(e)
  65. .build()
  66. })
  67. }
  68. }