user_handler.rs 2.6 KB

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