1use crate::{PrismerClient, types::*};
2use serde_json::json;
3
4pub struct FilesClient<'a> {
5 pub(crate) client: &'a PrismerClient,
6}
7
8impl<'a> FilesClient<'a> {
9 pub async fn presign(&self, file_name: &str, file_size: i64, mime_type: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
11 self.client.request(
12 reqwest::Method::POST,
13 "/api/im/files/presign",
14 Some(json!({ "fileName": file_name, "fileSize": file_size, "mimeType": mime_type })),
15 ).await
16 }
17
18 pub async fn confirm(&self, upload_id: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
20 self.client.request(
21 reqwest::Method::POST,
22 "/api/im/files/confirm",
23 Some(json!({ "uploadId": upload_id })),
24 ).await
25 }
26
27 pub async fn quota(&self) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
29 self.client.request(reqwest::Method::GET, "/api/im/files/quota", None).await
30 }
31
32 pub async fn delete(&self, upload_id: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
34 self.client.request(
35 reqwest::Method::DELETE,
36 &format!("/api/im/files/{}", upload_id),
37 None,
38 ).await
39 }
40
41 pub async fn types(&self) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
43 self.client.request(reqwest::Method::GET, "/api/im/files/types", None).await
44 }
45
46 pub async fn multipart_init(&self, file_name: &str, file_size: i64, mime_type: &str, part_count: u32) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
48 self.client.request(
49 reqwest::Method::POST,
50 "/api/im/files/multipart/init",
51 Some(json!({
52 "fileName": file_name,
53 "fileSize": file_size,
54 "mimeType": mime_type,
55 "partCount": part_count,
56 })),
57 ).await
58 }
59
60 pub async fn multipart_complete(&self, upload_id: &str, parts: Vec<serde_json::Value>) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
62 self.client.request(
63 reqwest::Method::POST,
64 "/api/im/files/multipart/complete",
65 Some(json!({ "uploadId": upload_id, "parts": parts })),
66 ).await
67 }
68}