cloudreve_api/api/v4/
user.rs1use crate::api::v4::models::*;
4use crate::api::v4::ApiV4Client;
5use crate::Error;
6
7impl ApiV4Client {
8 pub async fn register(&self, request: &RegisterRequest<'_>) -> Result<User, Error> {
9 let response: ApiResponse<User> = self.post("/user/register", request).await?;
10 Ok(response.data.unwrap())
11 }
12
13 pub async fn get_current_user(&self) -> Result<User, Error> {
14 let response: ApiResponse<User> = self.get("/user").await?;
15 Ok(response.data.unwrap())
16 }
17
18 pub async fn get_user_capacity(&self) -> Result<Quota, Error> {
19 let response: ApiResponse<Quota> = self.get("/user/capacity").await?;
20 Ok(response.data.unwrap())
21 }
22
23 pub async fn search_users(&self, request: &SearchUserRequest<'_>) -> Result<Vec<User>, Error> {
24 let endpoint = format!("/user/search?q={}", request.query);
25 let mut query_params = Vec::new();
26 if let Some(page) = request.page {
27 query_params.push(format!("page={}", page));
28 }
29 if let Some(page_size) = request.page_size {
30 query_params.push(format!("page_size={}", page_size));
31 }
32
33 let full_endpoint = if !query_params.is_empty() {
34 format!("{}&{}", endpoint, query_params.join("&"))
35 } else {
36 endpoint
37 };
38
39 let response: ApiResponse<Vec<User>> = self.get(&full_endpoint).await?;
40 Ok(response.data.unwrap())
41 }
42
43 pub async fn get_credit_changes(
44 &self,
45 page: Option<u32>,
46 page_size: Option<u32>,
47 ) -> Result<Vec<CreditChangeRecord>, Error> {
48 let mut endpoint = "/user/creditChanges".to_string();
49 let mut query_params = Vec::new();
50 if let Some(p) = page {
51 query_params.push(format!("page={}", p));
52 }
53 if let Some(ps) = page_size {
54 query_params.push(format!("page_size={}", ps));
55 }
56
57 if !query_params.is_empty() {
58 endpoint = format!("{}?{}", endpoint, query_params.join("&"));
59 }
60
61 let response: ApiResponse<Vec<CreditChangeRecord>> = self.get(&endpoint).await?;
62 Ok(response.data.unwrap())
63 }
64
65 pub async fn get_payment_records(
66 &self,
67 page: Option<u32>,
68 page_size: Option<u32>,
69 ) -> Result<Vec<PaymentRecord>, Error> {
70 let mut endpoint = "/user/payments".to_string();
71 let mut query_params = Vec::new();
72 if let Some(p) = page {
73 query_params.push(format!("page={}", p));
74 }
75 if let Some(ps) = page_size {
76 query_params.push(format!("page_size={}", ps));
77 }
78
79 if !query_params.is_empty() {
80 endpoint = format!("{}?{}", endpoint, query_params.join("&"));
81 }
82
83 let response: ApiResponse<Vec<PaymentRecord>> = self.get(&endpoint).await?;
84 Ok(response.data.unwrap())
85 }
86
87 pub async fn update_user_setting(
88 &self,
89 setting: &UpdateUserSettingRequest<'_>,
90 ) -> Result<(), Error> {
91 let response: ApiResponse<()> = self.patch("/user/setting", setting).await?;
92 if response.code == 0 {
93 Ok(())
94 } else {
95 Err(Error::Api {
96 code: response.code,
97 message: response.msg,
98 })
99 }
100 }
101
102 pub async fn get_user_setting(&self) -> Result<UserSettings, Error> {
103 let response: ApiResponse<UserSettings> = self.get("/user/setting").await?;
104 Ok(response.data.unwrap())
105 }
106
107 pub async fn enable_two_factor(&self) -> Result<TwoFactorSetup, Error> {
108 let response: ApiResponse<TwoFactorSetup> = self.post("/user/2fa/enable", &()).await?;
109 Ok(response.data.unwrap())
110 }
111
112 pub async fn verify_two_factor(&self, request: &TwoFactorVerify) -> Result<(), Error> {
113 let response: ApiResponse<()> = self.post("/user/2fa/verify", request).await?;
114 if response.code == 0 {
115 Ok(())
116 } else {
117 Err(Error::Api {
118 code: response.code,
119 message: response.msg,
120 })
121 }
122 }
123
124 pub async fn disable_two_factor(&self) -> Result<(), Error> {
125 let response: ApiResponse<()> = self.delete("/user/2fa/disable").await?;
126 if response.code == 0 {
127 Ok(())
128 } else {
129 Err(Error::Api {
130 code: response.code,
131 message: response.msg,
132 })
133 }
134 }
135
136 pub async fn get_user_avatar(&self, user_id: &str) -> Result<String, Error> {
137 let endpoint = format!("/user/avatar/{}", user_id);
138 let response: ApiResponse<String> = self.get(&endpoint).await?;
139 Ok(response.data.unwrap_or_default())
140 }
141
142 pub async fn get_user_info(&self, user_id: &str) -> Result<User, Error> {
143 let endpoint = format!("/user/info/{}", user_id);
144 let response: ApiResponse<User> = self.get(&endpoint).await?;
145 Ok(response.data.unwrap())
146 }
147
148 pub async fn get_user_shares(
149 &self,
150 user_id: &str,
151 page: Option<u32>,
152 page_size: Option<u32>,
153 ) -> Result<Vec<ShareLink>, Error> {
154 let mut endpoint = format!("/user/shares/{}", user_id);
155 let mut query_params = Vec::new();
156 if let Some(p) = page {
157 query_params.push(format!("page={}", p));
158 }
159 if let Some(ps) = page_size {
160 query_params.push(format!("page_size={}", ps));
161 }
162
163 if !query_params.is_empty() {
164 endpoint = format!("{}?{}", endpoint, query_params.join("&"));
165 }
166
167 let response: ApiResponse<Vec<ShareLink>> = self.get(&endpoint).await?;
168 Ok(response.data.unwrap())
169 }
170
171 pub async fn update_profile(&self, request: &UpdateProfileRequest<'_>) -> Result<User, Error> {
172 let response: ApiResponse<User> = self.put("/user/profile", request).await?;
173 Ok(response.data.unwrap())
174 }
175
176 pub async fn change_password(
177 &self,
178 old_password: &str,
179 new_password: &str,
180 ) -> Result<(), Error> {
181 let request = ChangePasswordRequest {
182 old_password,
183 new_password,
184 };
185 let _: ApiResponse<()> = self.post("/user/password", &request).await?;
186 Ok(())
187 }
188
189 pub async fn get_quota(&self) -> Result<Quota, Error> {
190 let response: ApiResponse<Quota> = self.get("/user/quota").await?;
191 Ok(response.data.unwrap())
192 }
193
194 pub async fn get_settings(&self) -> Result<UserSettings, Error> {
195 let response: ApiResponse<UserSettings> = self.get("/user/settings").await?;
196 Ok(response.data.unwrap())
197 }
198
199 pub async fn update_settings(&self, settings: &UserSettings) -> Result<UserSettings, Error> {
200 let response: ApiResponse<UserSettings> = self.put("/user/settings", settings).await?;
201 Ok(response.data.unwrap())
202 }
203
204 pub async fn get_storage_policies(&self) -> Result<Vec<StoragePolicy>, Error> {
205 let response: ApiResponse<Vec<StoragePolicy>> = self.get("/user/setting/policies").await?;
206
207 if response.code != 0 {
209 return Err(Error::Api {
210 code: response.code,
211 message: response.msg,
212 });
213 }
214
215 Ok(response.data.unwrap_or_default())
216 }
217}