find out how to nested the future into handler

This commit is contained in:
appflowy
2021-07-18 23:56:36 +08:00
parent 84931e7cc6
commit e1f73f5246
10 changed files with 114 additions and 80 deletions

View File

@ -16,6 +16,8 @@ protobuf = {version = "2.18.0"}
log = "0.4.14"
diesel = {version = "1.4.7", features = ["sqlite"]}
diesel_derives = {version = "1.4.1", features = ["sqlite"]}
futures-core = { version = "0.3", default-features = false }
pin-project = "1.0.0"
lazy_static = "1.4.0"
serde = { version = "1.0", features = ["derive"] }

View File

@ -1,16 +1,17 @@
use crate::{
entities::workspace::{CreateWorkspaceParams, CreateWorkspaceRequest, WorkspaceDetail},
errors::WorkspaceError,
services::WorkspaceController,
services::{save_workspace, WorkspaceController},
};
use flowy_dispatch::prelude::{response_ok, Data, ModuleData, ResponseResult};
use std::{convert::TryInto, sync::Arc};
use flowy_dispatch::prelude::{response_ok, Data, EventResponse, ModuleData, ResponseResult};
use std::{convert::TryInto, pin::Pin, sync::Arc};
pub async fn create_workspace(
data: Data<CreateWorkspaceRequest>,
controller: ModuleData<Arc<WorkspaceController>>,
) -> ResponseResult<WorkspaceDetail, WorkspaceError> {
let controller = controller.get_ref().clone();
let params: CreateWorkspaceParams = data.into_inner().try_into()?;
let detail = controller.save_workspace(params)?;
let detail = save_workspace(controller, params).await?;
response_ok(detail)
}

View File

@ -7,10 +7,11 @@ use crate::{
services::{AppController, WorkspaceController},
};
use flowy_database::DBConnection;
use futures_core::future::BoxFuture;
use std::sync::Arc;
pub trait WorkspaceUser: Send + Sync {
fn set_current_workspace(&self, id: &str);
fn set_current_workspace(&self, id: &str) -> BoxFuture<()>;
fn get_current_workspace(&self) -> Result<String, WorkspaceError>;
fn db_connection(&self) -> Result<DBConnection, WorkspaceError>;
}

View File

@ -1,15 +1,16 @@
use crate::{entities::workspace::*, errors::*, module::WorkspaceUser, sql_tables::workspace::*};
use flowy_database::{prelude::*, schema::workspace_table};
use futures_core::future::BoxFuture;
use std::sync::Arc;
pub struct WorkspaceController {
pub(crate) user: Arc<dyn WorkspaceUser>,
pub user: Arc<dyn WorkspaceUser>,
}
impl WorkspaceController {
pub fn new(user: Arc<dyn WorkspaceUser>) -> Self { Self { user } }
pub fn save_workspace(
pub async fn save_workspace(
&self,
params: CreateWorkspaceParams,
) -> Result<WorkspaceDetail, WorkspaceError> {
@ -34,3 +35,19 @@ impl WorkspaceController {
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)
}