user.rs 3.5 KB

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