mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
find out how to nested the future into handler
This commit is contained in:
@ -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"] }
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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>;
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user