botx_api/api/v3/files/download_file/
models.rs

1use serde::{Serialize, Deserialize};
2use uuid::Uuid;
3
4use crate::api::models::*;
5
6#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
7#[builder(setter(into, prefix = "with", strip_option))]
8pub struct DownloadFileRequest {
9    /// Идентификатор чата
10    pub group_chat_id: Uuid,
11
12    /// Идентификатор файла
13    pub file_id: Uuid,
14
15    /// Если true и файл имеет preview, то вернется содержимое preview, иначе оригинал
16    pub is_preview: bool,
17}
18
19/// Ошибки при запросе файла
20#[derive(Debug, Serialize, Deserialize, Clone)]
21#[serde(tag = "reason")]
22pub enum DownloadFileError {
23    /// Чат не найден
24    #[serde(rename(serialize = "chat_not_found", deserialize = "chat_not_found"))]
25    ChatNotFound(ChatNotFound),
26
27    /// Ошибка от Messaging сервиса
28    #[serde(rename(serialize = "error_from_messaging_service", deserialize = "error_from_messaging_service"))]
29    ErrorFromMessagingService(ErrorFromMessagingService),
30
31    /// Метаданные файла не найдены
32    #[serde(rename(serialize = "file_metadata_not_found", deserialize = "file_metadata_not_found"))]
33    FileMetadataNotFound(FileMetadataNotFound),
34
35    /// Файл сервис вернул ошибку при запросе метаданных файла
36    #[serde(rename(serialize = "error_from_file_service", deserialize = "error_from_file_service"))]
37    ErrorFromFileService(ErrorFromFileService),
38
39    /// Файл удален
40    #[serde(rename(serialize = "file_deleted", deserialize = "file_deleted"))]
41    FileDeleted(FileDeleted),
42
43    /// Ошибка при скачивание файла
44    #[serde(rename(serialize = "file_download_failed", deserialize = "file_download_failed"))]
45    FileDownloadFailed(FileDownloadFailed),
46
47    /// Ошибка при скачивание файла из s3 файл сервиса
48    #[serde(rename(serialize = "error_from_s3_file_service", deserialize = "error_from_s3_file_service"))]
49    ErrorFromS3FileService(ErrorFromS3FileService),
50
51    /// Файл не имеет preview
52    #[serde(rename(serialize = "file_without_preview", deserialize = "file_without_preview"))]
53    FileWithoutPreview(FileWithoutPreview),
54
55    // TODO: добавить десериализацию в HashMap<string, string> когда завезут реализацию
56    /// Неопределенная ошибка, смотрите логи
57    #[serde(other)]
58    Other,
59}
60
61/// Метаданные файла не найдены
62#[derive(Debug, Serialize, Deserialize, Clone)]
63pub struct FileMetadataNotFound {
64    /// Список ошибок
65    pub errors: Vec<String>,
66
67    /// Дополнительная информация об ошибке
68    pub error_data: FileMetadataNotFoundData,
69}
70
71#[derive(Debug, Serialize, Deserialize, Clone)]
72pub struct FileMetadataNotFoundData {
73    /// id запрошенного файла
74    pub file_id: Uuid,
75    
76    /// id чата в котором происходил поиск файла
77    pub group_chat_id: Uuid,
78
79    /// Описание ошибки
80    pub error_description: String,
81}
82
83/// Файл сервис вернул ошибку при запросе метаданных файла
84#[derive(Debug, Serialize, Deserialize, Clone)]
85pub struct ErrorFromFileService {
86    /// Список ошибок
87    pub errors: Vec<String>,
88
89    /// Дополнительная информация об ошибке
90    pub error_data: ErrorFromFileServiceData,
91}
92
93#[derive(Debug, Serialize, Deserialize, Clone)]
94pub struct ErrorFromFileServiceData {
95    /// id запрошенного файла
96    pub file_id: Uuid,
97    
98    /// id чата в котором происходил поиск файла
99    pub group_chat_id: Uuid,
100
101    /// Причина ошибки
102    pub reason: String,
103
104    /// Описание ошибки
105    pub error_description: String,
106}
107
108/// Файл удален
109#[derive(Debug, Serialize, Deserialize, Clone)]
110pub struct FileDeleted {
111    /// Список ошибок
112    pub errors: Vec<String>,
113
114    /// Дополнительная информация об ошибке
115    pub error_data: FileDeletedData,
116}
117
118#[derive(Debug, Serialize, Deserialize, Clone)]
119pub struct FileDeletedData {
120    /// Ссылка на удаленный файл
121    pub link: String,
122
123    /// Описание ошибки
124    pub error_description: String,
125}
126
127/// Ошибка при скачивание файла
128#[derive(Debug, Serialize, Deserialize, Clone)]
129pub struct FileDownloadFailed {
130    /// Список ошибок
131    pub errors: Vec<String>,
132
133    /// Дополнительная информация об ошибке
134    pub error_data: FileDownloadFailedData,
135}
136
137#[derive(Debug, Serialize, Deserialize, Clone)]
138pub struct FileDownloadFailedData {
139    /// Ссылка на файл
140    pub link: String,
141
142    /// Описание ошибки
143    pub error_description: String,
144}
145
146/// Ошибка при скачивание файла из s3 файл сервиса
147#[derive(Debug, Serialize, Deserialize, Clone)]
148pub struct ErrorFromS3FileService {
149    /// Список ошибок
150    pub errors: Vec<String>,
151
152    /// Дополнительная информация об ошибке
153    pub error_data: ErrorFromS3FileServiceData,
154}
155
156#[derive(Debug, Serialize, Deserialize, Clone)]
157pub struct ErrorFromS3FileServiceData {
158    /// Ссылка на файл
159    pub source_link: String,
160
161    /// Адрес расположения файла
162    pub location: String,
163
164    /// Описание ошибки
165    pub error_description: String,
166}
167
168/// Файл не имеет preview
169#[derive(Debug, Serialize, Deserialize, Clone)]
170pub struct FileWithoutPreview {
171    /// Список ошибок
172    pub errors: Vec<String>,
173
174    /// Дополнительная информация об ошибке
175    pub error_data: FileWithoutPreviewData,
176}
177
178#[derive(Debug, Serialize, Deserialize, Clone)]
179pub struct FileWithoutPreviewData {
180    /// id запрошенного файла
181    pub file_id: Uuid,
182    
183    /// id чата в котором происходил поиск файла
184    pub group_chat_id: Uuid,
185
186    /// Описание ошибки
187    pub error_description: String,
188}