workspace_handler.rs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. use crate::{
  2. errors::WorkspaceError,
  3. services::{AppController, ViewController, WorkspaceController},
  4. };
  5. use chrono::Utc;
  6. use flowy_dispatch::prelude::{data_result, Data, DataResult, Unit};
  7. use flowy_workspace_infra::{
  8. entities::{app::RepeatedApp, workspace::*},
  9. user_default,
  10. };
  11. use std::{convert::TryInto, sync::Arc};
  12. #[tracing::instrument(skip(controller), err)]
  13. pub(crate) async fn init_workspace_handler(controller: Unit<Arc<WorkspaceController>>) -> Result<(), WorkspaceError> {
  14. let _ = controller.init()?;
  15. Ok(())
  16. }
  17. #[tracing::instrument(skip(data, controller), err)]
  18. pub(crate) async fn create_workspace_handler(
  19. data: Data<CreateWorkspaceRequest>,
  20. controller: Unit<Arc<WorkspaceController>>,
  21. ) -> DataResult<Workspace, WorkspaceError> {
  22. let controller = controller.get_ref().clone();
  23. let params: CreateWorkspaceParams = data.into_inner().try_into()?;
  24. let detail = controller.create_workspace_from_params(params).await?;
  25. data_result(detail)
  26. }
  27. #[tracing::instrument(skip(controller), err)]
  28. pub(crate) async fn read_cur_workspace_handler(
  29. controller: Unit<Arc<WorkspaceController>>,
  30. ) -> DataResult<Workspace, WorkspaceError> {
  31. let workspace = controller.read_current_workspace().await?;
  32. data_result(workspace)
  33. }
  34. #[tracing::instrument(skip(controller), err)]
  35. pub(crate) async fn read_workspace_apps_handler(
  36. controller: Unit<Arc<WorkspaceController>>,
  37. ) -> DataResult<RepeatedApp, WorkspaceError> {
  38. let repeated_app = controller.read_current_workspace_apps().await?;
  39. data_result(repeated_app)
  40. }
  41. #[tracing::instrument(skip(workspace_controller, app_controller, view_controller), err)]
  42. pub(crate) async fn create_default_workspace_handler(
  43. workspace_controller: Unit<Arc<WorkspaceController>>,
  44. app_controller: Unit<Arc<AppController>>,
  45. view_controller: Unit<Arc<ViewController>>,
  46. ) -> DataResult<WorkspaceIdentifier, WorkspaceError> {
  47. let time = Utc::now();
  48. let mut workspace = user_default::create_default_workspace(time);
  49. let workspace_id = workspace.id.clone();
  50. let apps = workspace.take_apps().into_inner();
  51. let _ = workspace_controller.create_workspace(workspace).await?;
  52. for mut app in apps {
  53. let views = app.take_belongings().into_inner();
  54. let _ = app_controller.create_app(app).await?;
  55. for view in views {
  56. let _ = view_controller.create_view(view).await?;
  57. }
  58. }
  59. data_result(WorkspaceIdentifier {
  60. workspace_id: Some(workspace_id),
  61. })
  62. }
  63. #[tracing::instrument(skip(data, controller), err)]
  64. pub(crate) async fn read_workspaces_handler(
  65. data: Data<QueryWorkspaceRequest>,
  66. controller: Unit<Arc<WorkspaceController>>,
  67. ) -> DataResult<RepeatedWorkspace, WorkspaceError> {
  68. let params: WorkspaceIdentifier = data.into_inner().try_into()?;
  69. let workspaces = controller.read_workspaces(params).await?;
  70. data_result(workspaces)
  71. }
  72. #[tracing::instrument(skip(data, controller), err)]
  73. pub(crate) async fn open_workspace_handler(
  74. data: Data<QueryWorkspaceRequest>,
  75. controller: Unit<Arc<WorkspaceController>>,
  76. ) -> DataResult<Workspace, WorkspaceError> {
  77. let params: WorkspaceIdentifier = data.into_inner().try_into()?;
  78. let workspaces = controller.open_workspace(params).await?;
  79. data_result(workspaces)
  80. }