| 
									
										
										
										
											2021-07-14 21:12:52 +08:00
										 |  |  | use crate::{entities::workspace::*, errors::*, module::WorkspaceUser, sql_tables::workspace::*};
 | 
					
						
							|  |  |  | use flowy_database::{prelude::*, schema::workspace_table};
 | 
					
						
							| 
									
										
										
										
											2021-07-18 23:56:36 +08:00
										 |  |  | use futures_core::future::BoxFuture;
 | 
					
						
							| 
									
										
										
										
											2021-07-13 23:08:20 +08:00
										 |  |  | use std::sync::Arc;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | pub struct WorkspaceController {
 | 
					
						
							| 
									
										
										
										
											2021-07-18 23:56:36 +08:00
										 |  |  |     pub user: Arc<dyn WorkspaceUser>,
 | 
					
						
							| 
									
										
										
										
											2021-07-13 23:08:20 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | impl WorkspaceController {
 | 
					
						
							| 
									
										
										
										
											2021-07-14 21:12:52 +08:00
										 |  |  |     pub fn new(user: Arc<dyn WorkspaceUser>) -> Self { Self { user } }
 | 
					
						
							| 
									
										
										
										
											2021-07-13 23:08:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-18 23:56:36 +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);
 | 
					
						
							| 
									
										
										
										
											2021-07-14 21:12:52 +08:00
										 |  |  |         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)?;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-15 08:46:16 +08:00
										 |  |  |         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);
 | 
					
						
							| 
									
										
										
										
											2021-07-14 21:12:52 +08:00
										 |  |  |         let conn = self.user.db_connection()?;
 | 
					
						
							| 
									
										
										
										
											2021-07-13 23:08:20 +08:00
										 |  |  |         diesel_update_table!(workspace_table, changeset, conn);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Ok(())
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-07-18 23:56:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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)
 | 
					
						
							|  |  |  | }
 |