workspace_controller.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. use crate::{entities::workspace::*, errors::*, module::WorkspaceUser, sql_tables::workspace::*};
  2. use flowy_database::{prelude::*, schema::workspace_table};
  3. use std::sync::Arc;
  4. pub struct WorkspaceController {
  5. pub user: Arc<dyn WorkspaceUser>,
  6. }
  7. impl WorkspaceController {
  8. pub fn new(user: Arc<dyn WorkspaceUser>) -> Self { Self { user } }
  9. pub async fn save_workspace(
  10. &self,
  11. params: CreateWorkspaceParams,
  12. ) -> Result<WorkspaceDetail, WorkspaceError> {
  13. let workspace = Workspace::new(params);
  14. let detail: WorkspaceDetail = workspace.clone().into();
  15. let _ = diesel::insert_into(workspace_table::table)
  16. .values(workspace)
  17. .execute(&*(self.user.db_connection()?))?;
  18. let _ = self.user.set_workspace(&detail.id).await?;
  19. Ok(detail)
  20. }
  21. pub fn update_workspace(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> {
  22. let changeset = WorkspaceChangeset::new(params);
  23. let conn = self.user.db_connection()?;
  24. diesel_update_table!(workspace_table, changeset, conn);
  25. Ok(())
  26. }
  27. }