gewe_http/personal/
profile.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    GetProfileRequest, GetProfileResponse, GetQrCodeRequest, GetQrCodeResponse, GeweError,
4    UpdateHeadImgRequest, UpdateProfileRequest,
5};
6use tracing::instrument;
7
8impl GeweHttpClient {
9    #[instrument(skip(self))]
10    pub async fn get_profile(
11        &self,
12        req: GetProfileRequest<'_>,
13    ) -> Result<GetProfileResponse, GeweError> {
14        let env = self
15            .post_api::<_, GetProfileResponse>("gewe/v2/api/personal/getProfile", &req)
16            .await?;
17        env.data.ok_or(GeweError::MissingData)
18    }
19
20    #[instrument(skip(self))]
21    pub async fn update_profile(&self, req: UpdateProfileRequest<'_>) -> Result<(), GeweError> {
22        let _ = self
23            .post_api::<_, ()>("gewe/v2/api/personal/updateProfile", &req)
24            .await?;
25        Ok(())
26    }
27
28    #[instrument(skip(self))]
29    pub async fn update_head_img(&self, req: UpdateHeadImgRequest<'_>) -> Result<(), GeweError> {
30        let _ = self
31            .post_api::<_, ()>("gewe/v2/api/personal/updateHeadImg", &req)
32            .await?;
33        Ok(())
34    }
35
36    #[instrument(skip(self))]
37    pub async fn get_qr_code(
38        &self,
39        req: GetQrCodeRequest<'_>,
40    ) -> Result<GetQrCodeResponse, GeweError> {
41        let env = self
42            .post_api::<_, GetQrCodeResponse>("gewe/v2/api/personal/getQrCode", &req)
43            .await?;
44        env.data.ok_or(GeweError::MissingData)
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use super::*;
51
52    #[test]
53    fn test_get_profile_request() {
54        let req = GetProfileRequest { app_id: "test_app" };
55        let json = serde_json::to_string(&req).expect("Failed to serialize");
56        assert!(json.contains("appId"));
57    }
58
59    #[test]
60    fn test_update_profile_request() {
61        let req = UpdateProfileRequest {
62            app_id: "test_app",
63            nick_name: Some("NewName"),
64            country: Some("China"),
65            province: Some("Beijing"),
66            city: Some("Beijing"),
67            sex: Some(1),
68            signature: Some("New signature"),
69        };
70        let json = serde_json::to_string(&req).expect("Failed to serialize");
71        assert!(json.contains("appId"));
72        assert!(json.contains("NewName"));
73    }
74
75    #[test]
76    fn test_update_head_img_request() {
77        let req = UpdateHeadImgRequest {
78            app_id: "test_app",
79            head_img_url: "https://example.com/avatar.jpg",
80        };
81        let json = serde_json::to_string(&req).expect("Failed to serialize");
82        assert!(json.contains("appId"));
83        assert!(json.contains("headImgUrl"));
84    }
85
86    #[test]
87    fn test_get_qr_code_request() {
88        let req = GetQrCodeRequest { app_id: "test_app" };
89        let json = serde_json::to_string(&req).expect("Failed to serialize");
90        assert!(json.contains("appId"));
91    }
92}