|
@@ -10,14 +10,13 @@ use lazy_static::lazy_static;
|
|
use std::sync::{Arc, RwLock};
|
|
use std::sync::{Arc, RwLock};
|
|
|
|
|
|
use crate::{
|
|
use crate::{
|
|
- entities::{SignInParams, SignUpParams, UpdateUserParams, UserDetail},
|
|
|
|
|
|
+ entities::{SignInParams, SignUpParams, UpdateUserParams, UpdateUserRequest, UserDetail},
|
|
errors::{ErrorBuilder, UserError, UserErrorCode},
|
|
errors::{ErrorBuilder, UserError, UserErrorCode},
|
|
- event::UserEvent::GetStatus,
|
|
|
|
|
|
+ event::UserEvent::*,
|
|
services::user_session::{database::UserDB, user_server::UserServer},
|
|
services::user_session::{database::UserDB, user_server::UserServer},
|
|
sql_tables::{User, UserChangeset},
|
|
sql_tables::{User, UserChangeset},
|
|
};
|
|
};
|
|
-use flowy_dispatch::prelude::{Data, EventDispatch, ModuleRequest};
|
|
|
|
-use std::convert::TryFrom;
|
|
|
|
|
|
+use flowy_dispatch::prelude::{EventDispatch, ModuleRequest, ToBytes};
|
|
|
|
|
|
pub struct UserSessionConfig {
|
|
pub struct UserSessionConfig {
|
|
root_dir: String,
|
|
root_dir: String,
|
|
@@ -50,20 +49,25 @@ impl UserSession {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- pub async fn sign_in(&self, params: SignInParams) -> Result<User, UserError> {
|
|
|
|
|
|
+ pub fn get_db_connection(&self) -> Result<DBConnection, UserError> {
|
|
|
|
+ let user_id = get_current_user_id()?;
|
|
|
|
+ self.database.get_connection(&user_id)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pub fn sign_in(&self, params: SignInParams) -> Result<User, UserError> {
|
|
let user = self.server.sign_in(params)?;
|
|
let user = self.server.sign_in(params)?;
|
|
let _ = set_current_user_id(Some(user.id.clone()))?;
|
|
let _ = set_current_user_id(Some(user.id.clone()))?;
|
|
self.save_user(user)
|
|
self.save_user(user)
|
|
}
|
|
}
|
|
|
|
|
|
- pub async fn sign_up(&self, params: SignUpParams) -> Result<User, UserError> {
|
|
|
|
|
|
+ pub fn sign_up(&self, params: SignUpParams) -> Result<User, UserError> {
|
|
let user = self.server.sign_up(params)?;
|
|
let user = self.server.sign_up(params)?;
|
|
let _ = set_current_user_id(Some(user.id.clone()))?;
|
|
let _ = set_current_user_id(Some(user.id.clone()))?;
|
|
self.save_user(user)
|
|
self.save_user(user)
|
|
}
|
|
}
|
|
|
|
|
|
- pub async fn sign_out(&self) -> Result<(), UserError> {
|
|
|
|
- let user_id = self.current_user_id()?;
|
|
|
|
|
|
+ pub fn sign_out(&self) -> Result<(), UserError> {
|
|
|
|
+ let user_id = current_user_id()?;
|
|
let conn = self.get_db_connection()?;
|
|
let conn = self.get_db_connection()?;
|
|
let _ = diesel::delete(dsl::user_table.filter(dsl::id.eq(&user_id))).execute(&*conn)?;
|
|
let _ = diesel::delete(dsl::user_table.filter(dsl::id.eq(&user_id))).execute(&*conn)?;
|
|
|
|
|
|
@@ -77,17 +81,26 @@ impl UserSession {
|
|
Ok(())
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
|
|
- pub async fn update_user(&self, params: UpdateUserParams) -> Result<UserDetail, UserError> {
|
|
|
|
|
|
+ fn save_user(&self, user: User) -> Result<User, UserError> {
|
|
|
|
+ let conn = self.get_db_connection()?;
|
|
|
|
+ let _ = diesel::insert_into(user_table::table)
|
|
|
|
+ .values(user.clone())
|
|
|
|
+ .execute(&*conn)?;
|
|
|
|
+
|
|
|
|
+ Ok(user)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pub fn update_user(&self, params: UpdateUserParams) -> Result<UserDetail, UserError> {
|
|
let changeset = UserChangeset::new(params);
|
|
let changeset = UserChangeset::new(params);
|
|
let conn = self.get_db_connection()?;
|
|
let conn = self.get_db_connection()?;
|
|
diesel_update_table!(user_table, changeset, conn);
|
|
diesel_update_table!(user_table, changeset, conn);
|
|
|
|
|
|
- let user_detail = self.current_user_detail()?;
|
|
|
|
|
|
+ let user_detail = self.user_detail()?;
|
|
Ok(user_detail)
|
|
Ok(user_detail)
|
|
}
|
|
}
|
|
|
|
|
|
- pub fn current_user_detail(&self) -> Result<UserDetail, UserError> {
|
|
|
|
- let user_id = self.current_user_id()?;
|
|
|
|
|
|
+ pub fn user_detail(&self) -> Result<UserDetail, UserError> {
|
|
|
|
+ let user_id = current_user_id()?;
|
|
let conn = self.get_db_connection()?;
|
|
let conn = self.get_db_connection()?;
|
|
|
|
|
|
let user = dsl::user_table
|
|
let user = dsl::user_table
|
|
@@ -105,60 +118,35 @@ impl UserSession {
|
|
|
|
|
|
Ok(UserDetail::from(user))
|
|
Ok(UserDetail::from(user))
|
|
}
|
|
}
|
|
-
|
|
|
|
- pub fn get_db_connection(&self) -> Result<DBConnection, UserError> {
|
|
|
|
- let user_id = get_current_user_id()?;
|
|
|
|
- self.database.get_connection(&user_id)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- pub fn set_current_workspace() {
|
|
|
|
- unimplemented!()
|
|
|
|
-
|
|
|
|
- // let request = SignInRequest {
|
|
|
|
- // email: valid_email(),
|
|
|
|
- // password: valid_password(),
|
|
|
|
- // };
|
|
|
|
- //
|
|
|
|
- // let user_detail = Tester::<UserError>::new(SignIn)
|
|
|
|
- // .request(request)
|
|
|
|
- // .sync_send()
|
|
|
|
- // .parse::<UserDetail>();
|
|
|
|
- //
|
|
|
|
- // user_detail
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- #[allow(dead_code)]
|
|
|
|
- pub fn get_current_workspace(&self) -> Result<String, UserError> {
|
|
|
|
- // let response = EventDispatch::sync_send(ModuleRequest::new(GetStatus));
|
|
|
|
- // let user_detail =
|
|
|
|
- // <Data<UserDetail>>::try_from(response.payload).unwrap().into_inner();
|
|
|
|
- let user_id = get_current_user_id()?;
|
|
|
|
- let conn = self.get_db_connection()?;
|
|
|
|
-
|
|
|
|
- let workspace = dsl::user_table
|
|
|
|
- .filter(user_table::id.eq(&user_id))
|
|
|
|
- .select(user_table::workspace)
|
|
|
|
- .first::<String>(&*conn)?;
|
|
|
|
-
|
|
|
|
- Ok(workspace)
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
impl UserSession {
|
|
impl UserSession {
|
|
- fn save_user(&self, user: User) -> Result<User, UserError> {
|
|
|
|
- let conn = self.get_db_connection()?;
|
|
|
|
- let _ = diesel::insert_into(user_table::table)
|
|
|
|
- .values(user.clone())
|
|
|
|
- .execute(&*conn)?;
|
|
|
|
-
|
|
|
|
- Ok(user)
|
|
|
|
|
|
+ pub async fn set_current_workspace(workspace: &str) -> Result<(), UserError> {
|
|
|
|
+ let user_id = current_user_id()?;
|
|
|
|
+ let payload: Vec<u8> = UpdateUserRequest {
|
|
|
|
+ id: user_id,
|
|
|
|
+ name: None,
|
|
|
|
+ email: None,
|
|
|
|
+ workspace: Some(workspace.to_owned()),
|
|
|
|
+ password: None,
|
|
|
|
+ }
|
|
|
|
+ .into_bytes()
|
|
|
|
+ .unwrap();
|
|
|
|
+
|
|
|
|
+ let request = ModuleRequest::new(UpdateUser).payload(payload);
|
|
|
|
+ let _user_detail = EventDispatch::async_send(request)
|
|
|
|
+ .await
|
|
|
|
+ .parse::<UserDetail, UserError>()
|
|
|
|
+ .unwrap()
|
|
|
|
+ .unwrap();
|
|
|
|
+ Ok(())
|
|
}
|
|
}
|
|
|
|
+}
|
|
|
|
|
|
- fn current_user_id(&self) -> Result<String, UserError> {
|
|
|
|
- match KVStore::get_str(USER_ID_DISK_CACHE_KEY) {
|
|
|
|
- None => Err(ErrorBuilder::new(UserErrorCode::UserNotLoginYet).build()),
|
|
|
|
- Some(user_id) => Ok(user_id),
|
|
|
|
- }
|
|
|
|
|
|
+fn current_user_id() -> Result<String, UserError> {
|
|
|
|
+ match KVStore::get_str(USER_ID_DISK_CACHE_KEY) {
|
|
|
|
+ None => Err(ErrorBuilder::new(UserErrorCode::UserNotLoginYet).build()),
|
|
|
|
+ Some(user_id) => Ok(user_id),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|