gewe_http/video_account/
profile.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    CreateFinderRequest, CreateFinderResponse, GetFinderProfileRequest, GetFinderQrCodeRequest,
4    GetFinderQrCodeResponse, GeweError, UpdateFinderProfileRequest, UserPageRequest,
5    UserPageResponse,
6};
7use tracing::instrument;
8
9impl GeweHttpClient {
10    #[instrument(skip(self))]
11    pub async fn create_finder(
12        &self,
13        req: CreateFinderRequest<'_>,
14    ) -> Result<CreateFinderResponse, GeweError> {
15        let env = self
16            .post_api::<_, CreateFinderResponse>("gewe/v2/api/finder/createFinder", &req)
17            .await?;
18        env.data.ok_or(GeweError::MissingData)
19    }
20
21    #[instrument(skip(self))]
22    pub async fn update_finder_profile(
23        &self,
24        req: UpdateFinderProfileRequest<'_>,
25    ) -> Result<(), GeweError> {
26        self.post_api::<_, serde_json::Value>("gewe/v2/api/finder/updateProfile", &req)
27            .await?;
28        Ok(())
29    }
30
31    #[instrument(skip(self))]
32    pub async fn get_finder_profile(
33        &self,
34        req: GetFinderProfileRequest<'_>,
35    ) -> Result<gewe_core::FinderProfileInfo, GeweError> {
36        let env = self
37            .post_api::<_, gewe_core::FinderProfileInfo>("gewe/v2/api/finder/getProfile", &req)
38            .await?;
39        env.data.ok_or(GeweError::MissingData)
40    }
41
42    #[instrument(skip(self))]
43    pub async fn get_finder_qr_code(
44        &self,
45        req: GetFinderQrCodeRequest<'_>,
46    ) -> Result<GetFinderQrCodeResponse, GeweError> {
47        let env = self
48            .post_api::<_, GetFinderQrCodeResponse>("gewe/v2/api/finder/getQrCode", &req)
49            .await?;
50        env.data.ok_or(GeweError::MissingData)
51    }
52
53    #[instrument(skip(self))]
54    pub async fn user_page(&self, req: UserPageRequest<'_>) -> Result<UserPageResponse, GeweError> {
55        let env = self
56            .post_api::<_, UserPageResponse>("gewe/v2/api/finder/userPage", &req)
57            .await?;
58        env.data.ok_or(GeweError::MissingData)
59    }
60}
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn test_create_finder_request() {
68        let req = CreateFinderRequest {
69            app_id: "test_app",
70            nick_name: "MyFinderNickname",
71            head_img: "https://example.com/head.jpg",
72            signature: None,
73            sex: None,
74        };
75        let json = serde_json::to_string(&req).expect("Failed to serialize");
76        assert!(json.contains("appId"));
77        assert!(json.contains("nickName"));
78    }
79
80    #[test]
81    fn test_update_finder_profile_request() {
82        let req = UpdateFinderProfileRequest {
83            app_id: "test_app",
84            nick_name: Some("NewNickname"),
85            head_img: None,
86            signature: Some("New signature"),
87            sex: None,
88            country: None,
89            province: None,
90            city: None,
91            my_user_name: "my_user",
92            my_role_type: 1,
93        };
94        let json = serde_json::to_string(&req).expect("Failed to serialize");
95        assert!(json.contains("appId"));
96        assert!(json.contains("nickName"));
97    }
98
99    #[test]
100    fn test_get_finder_profile_request() {
101        let req = GetFinderProfileRequest { app_id: "test_app" };
102        let json = serde_json::to_string(&req).expect("Failed to serialize");
103        assert!(json.contains("appId"));
104    }
105
106    #[test]
107    fn test_user_page_request() {
108        let req = UserPageRequest {
109            app_id: "test_app",
110            to_user_name: "finder_user",
111            last_buffer: None,
112            max_id: None,
113            search_info: None,
114        };
115        let json = serde_json::to_string(&req).expect("Failed to serialize");
116        assert!(json.contains("appId"));
117        assert!(json.contains("toUserName"));
118    }
119}