user.rs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. use crate::request::HttpRequestBuilder;
  2. use flowy_client_network_config::{ClientServerConfiguration, HEADER_TOKEN};
  3. use flowy_error::FlowyError;
  4. use flowy_user::entities::UserProfilePB;
  5. use flowy_user::event_map::UserCloudService;
  6. use lib_infra::future::FutureResult;
  7. use user_model::*;
  8. pub struct UserHttpCloudService {
  9. config: ClientServerConfiguration,
  10. }
  11. impl UserHttpCloudService {
  12. pub fn new(config: &ClientServerConfiguration) -> Self {
  13. Self {
  14. config: config.clone(),
  15. }
  16. }
  17. }
  18. impl UserCloudService for UserHttpCloudService {
  19. fn sign_up(&self, params: SignUpParams) -> FutureResult<SignUpResponse, FlowyError> {
  20. let url = self.config.sign_up_url();
  21. FutureResult::new(async move {
  22. let resp = user_sign_up_request(params, &url).await?;
  23. Ok(resp)
  24. })
  25. }
  26. fn sign_in(&self, params: SignInParams) -> FutureResult<SignInResponse, FlowyError> {
  27. let url = self.config.sign_in_url();
  28. FutureResult::new(async move {
  29. let resp = user_sign_in_request(params, &url).await?;
  30. Ok(resp)
  31. })
  32. }
  33. fn sign_out(&self, token: &str) -> FutureResult<(), FlowyError> {
  34. let token = token.to_owned();
  35. let url = self.config.sign_out_url();
  36. FutureResult::new(async move {
  37. let _ = user_sign_out_request(&token, &url).await;
  38. Ok(())
  39. })
  40. }
  41. fn update_user(
  42. &self,
  43. token: &str,
  44. params: UpdateUserProfileParams,
  45. ) -> FutureResult<(), FlowyError> {
  46. let token = token.to_owned();
  47. let url = self.config.user_profile_url();
  48. FutureResult::new(async move {
  49. update_user_profile_request(&token, params, &url).await?;
  50. Ok(())
  51. })
  52. }
  53. fn get_user(&self, token: &str) -> FutureResult<UserProfilePB, FlowyError> {
  54. let token = token.to_owned();
  55. let url = self.config.user_profile_url();
  56. FutureResult::new(async move {
  57. let profile = get_user_profile_request(&token, &url).await?;
  58. Ok(profile)
  59. })
  60. }
  61. fn ws_addr(&self) -> String {
  62. self.config.ws_addr()
  63. }
  64. }
  65. pub async fn user_sign_up_request(
  66. params: SignUpParams,
  67. url: &str,
  68. ) -> Result<SignUpResponse, FlowyError> {
  69. let response = request_builder()
  70. .post(url)
  71. .json(params)?
  72. .json_response()
  73. .await?;
  74. Ok(response)
  75. }
  76. pub async fn user_sign_in_request(
  77. params: SignInParams,
  78. url: &str,
  79. ) -> Result<SignInResponse, FlowyError> {
  80. let response = request_builder()
  81. .post(url)
  82. .json(params)?
  83. .json_response()
  84. .await?;
  85. Ok(response)
  86. }
  87. pub async fn user_sign_out_request(token: &str, url: &str) -> Result<(), FlowyError> {
  88. request_builder()
  89. .delete(url)
  90. .header(HEADER_TOKEN, token)
  91. .send()
  92. .await?;
  93. Ok(())
  94. }
  95. pub async fn get_user_profile_request(token: &str, url: &str) -> Result<UserProfilePB, FlowyError> {
  96. let user_profile = request_builder()
  97. .get(url)
  98. .header(HEADER_TOKEN, token)
  99. .response()
  100. .await?;
  101. Ok(user_profile)
  102. }
  103. pub async fn update_user_profile_request(
  104. token: &str,
  105. params: UpdateUserProfileParams,
  106. url: &str,
  107. ) -> Result<(), FlowyError> {
  108. request_builder()
  109. .patch(url)
  110. .header(HEADER_TOKEN, token)
  111. .json(params)?
  112. .send()
  113. .await?;
  114. Ok(())
  115. }
  116. fn request_builder() -> HttpRequestBuilder {
  117. HttpRequestBuilder::new()
  118. }