gewe_http/video_account/
profile.rs1use 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}