user_handler.rs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. use crate::{errors::FlowyError, services::UserSession};
  2. use flowy_database::kv::KV;
  3. use flowy_user_data_model::entities::{
  4. AppearanceSettings, UpdateUserParams, UpdateUserRequest, UserProfile, APPEARANCE_DEFAULT_LANGUAGE,
  5. APPEARANCE_DEFAULT_THEME,
  6. };
  7. use lib_dispatch::prelude::*;
  8. use std::{convert::TryInto, sync::Arc};
  9. #[tracing::instrument(skip(session))]
  10. pub async fn init_user_handler(session: Unit<Arc<UserSession>>) -> Result<(), FlowyError> {
  11. let _ = session.init_user().await?;
  12. Ok(())
  13. }
  14. #[tracing::instrument(skip(session))]
  15. pub async fn check_user_handler(session: Unit<Arc<UserSession>>) -> DataResult<UserProfile, FlowyError> {
  16. let user_profile = session.check_user().await?;
  17. data_result(user_profile)
  18. }
  19. #[tracing::instrument(skip(session))]
  20. pub async fn get_user_profile_handler(session: Unit<Arc<UserSession>>) -> DataResult<UserProfile, FlowyError> {
  21. let user_profile = session.user_profile().await?;
  22. data_result(user_profile)
  23. }
  24. #[tracing::instrument(name = "sign_out", skip(session))]
  25. pub async fn sign_out(session: Unit<Arc<UserSession>>) -> Result<(), FlowyError> {
  26. let _ = session.sign_out().await?;
  27. Ok(())
  28. }
  29. #[tracing::instrument(name = "update_user", skip(data, session))]
  30. pub async fn update_user_handler(
  31. data: Data<UpdateUserRequest>,
  32. session: Unit<Arc<UserSession>>,
  33. ) -> Result<(), FlowyError> {
  34. let params: UpdateUserParams = data.into_inner().try_into()?;
  35. session.update_user(params).await?;
  36. Ok(())
  37. }
  38. const APPEARANCE_SETTING_CACHE_KEY: &str = "appearance_settings";
  39. #[tracing::instrument(skip(data), err)]
  40. pub async fn set_appearance_setting(data: Data<AppearanceSettings>) -> Result<(), FlowyError> {
  41. let mut setting = data.into_inner();
  42. if setting.theme.is_empty() {
  43. setting.theme = APPEARANCE_DEFAULT_THEME.to_string();
  44. }
  45. if setting.language.is_empty() {
  46. setting.theme = APPEARANCE_DEFAULT_LANGUAGE.to_string();
  47. }
  48. let s = serde_json::to_string(&setting)?;
  49. KV::set_str(APPEARANCE_SETTING_CACHE_KEY, s);
  50. Ok(())
  51. }
  52. #[tracing::instrument(err)]
  53. pub async fn get_appearance_setting() -> DataResult<AppearanceSettings, FlowyError> {
  54. match KV::get_str(APPEARANCE_SETTING_CACHE_KEY) {
  55. None => data_result(AppearanceSettings::default()),
  56. Some(s) => {
  57. let setting: AppearanceSettings = serde_json::from_str(&s)?;
  58. data_result(setting)
  59. }
  60. }
  61. }