AppFlowy/rust-lib/flowy-workspace/src/services/workspace_controller.rs

54 lines
1.6 KiB
Rust
Raw Normal View History

use crate::{entities::workspace::*, errors::*, module::WorkspaceUser, sql_tables::workspace::*};
use flowy_database::{prelude::*, schema::workspace_table};
use futures_core::future::BoxFuture;
2021-07-13 23:08:20 +08:00
use std::sync::Arc;
pub struct WorkspaceController {
pub user: Arc<dyn WorkspaceUser>,
2021-07-13 23:08:20 +08:00
}
impl WorkspaceController {
pub fn new(user: Arc<dyn WorkspaceUser>) -> Self { Self { user } }
2021-07-13 23:08:20 +08:00
pub async fn save_workspace(
2021-07-14 08:07:25 +08:00
&self,
params: CreateWorkspaceParams,
) -> Result<WorkspaceDetail, WorkspaceError> {
2021-07-13 23:08:20 +08:00
let workspace = Workspace::new(params);
let conn = self.user.db_connection()?;
2021-07-14 08:07:25 +08:00
let detail: WorkspaceDetail = workspace.clone().into();
2021-07-13 23:08:20 +08:00
let _ = diesel::insert_into(workspace_table::table)
.values(workspace)
.execute(&*conn)?;
self.user.set_current_workspace(&detail.id);
2021-07-14 08:07:25 +08:00
Ok(detail)
2021-07-13 23:08:20 +08:00
}
pub fn update_workspace(&self, params: UpdateWorkspaceParams) -> Result<(), WorkspaceError> {
let changeset = WorkspaceChangeset::new(params);
let conn = self.user.db_connection()?;
2021-07-13 23:08:20 +08:00
diesel_update_table!(workspace_table, changeset, conn);
Ok(())
}
}
pub async fn save_workspace(
controller: Arc<WorkspaceController>,
params: CreateWorkspaceParams,
) -> Result<WorkspaceDetail, WorkspaceError> {
let workspace = Workspace::new(params);
let detail: WorkspaceDetail = workspace.clone().into();
let _ = diesel::insert_into(workspace_table::table)
.values(workspace)
.execute(&*(controller.user.db_connection()?))?;
// set_current_workspace(controller.clone(), &detail.id).await;
Ok(detail)
}