backbone_bucket/presentation/dto/
mod.rs1pub mod access_log_dto;
9pub mod bucket_dto;
10pub mod content_hash_dto;
11pub mod conversion_job_dto;
12pub mod file_comment_dto;
13pub mod file_lock_dto;
14pub mod file_share_dto;
15pub mod file_version_dto;
16pub mod processing_job_dto;
17pub mod stored_file_dto;
18pub mod thumbnail_dto;
19pub mod upload_session_dto;
20pub mod user_quota_dto;
21
22pub use access_log_dto::{
24 CreateAccessLogDto,
25 UpdateAccessLogDto,
26 PatchAccessLogDto,
27 AccessLogResponseDto,
28 AccessLogListResponseDto,
29 AccessLogSummaryDto,
30};
31pub use bucket_dto::{
32 CreateBucketDto,
33 UpdateBucketDto,
34 PatchBucketDto,
35 BucketResponseDto,
36 BucketListResponseDto,
37 BucketSummaryDto,
38};
39pub use content_hash_dto::{
40 CreateContentHashDto,
41 UpdateContentHashDto,
42 PatchContentHashDto,
43 ContentHashResponseDto,
44 ContentHashListResponseDto,
45 ContentHashSummaryDto,
46};
47pub use conversion_job_dto::{
48 CreateConversionJobDto,
49 UpdateConversionJobDto,
50 PatchConversionJobDto,
51 ConversionJobResponseDto,
52 ConversionJobListResponseDto,
53 ConversionJobSummaryDto,
54};
55pub use file_comment_dto::{
56 CreateFileCommentDto,
57 UpdateFileCommentDto,
58 PatchFileCommentDto,
59 FileCommentResponseDto,
60 FileCommentListResponseDto,
61 FileCommentSummaryDto,
62};
63pub use file_lock_dto::{
64 CreateFileLockDto,
65 UpdateFileLockDto,
66 PatchFileLockDto,
67 FileLockResponseDto,
68 FileLockListResponseDto,
69 FileLockSummaryDto,
70};
71pub use file_share_dto::{
72 CreateFileShareDto,
73 UpdateFileShareDto,
74 PatchFileShareDto,
75 FileShareResponseDto,
76 FileShareListResponseDto,
77 FileShareSummaryDto,
78};
79pub use file_version_dto::{
80 CreateFileVersionDto,
81 UpdateFileVersionDto,
82 PatchFileVersionDto,
83 FileVersionResponseDto,
84 FileVersionListResponseDto,
85 FileVersionSummaryDto,
86};
87pub use processing_job_dto::{
88 CreateProcessingJobDto,
89 UpdateProcessingJobDto,
90 PatchProcessingJobDto,
91 ProcessingJobResponseDto,
92 ProcessingJobListResponseDto,
93 ProcessingJobSummaryDto,
94};
95pub use stored_file_dto::{
96 CreateStoredFileDto,
97 UpdateStoredFileDto,
98 PatchStoredFileDto,
99 StoredFileResponseDto,
100 StoredFileListResponseDto,
101 StoredFileSummaryDto,
102};
103pub use thumbnail_dto::{
104 CreateThumbnailDto,
105 UpdateThumbnailDto,
106 PatchThumbnailDto,
107 ThumbnailResponseDto,
108 ThumbnailListResponseDto,
109 ThumbnailSummaryDto,
110};
111pub use upload_session_dto::{
112 CreateUploadSessionDto,
113 UpdateUploadSessionDto,
114 PatchUploadSessionDto,
115 UploadSessionResponseDto,
116 UploadSessionListResponseDto,
117 UploadSessionSummaryDto,
118};
119pub use user_quota_dto::{
120 CreateUserQuotaDto,
121 UpdateUserQuotaDto,
122 PatchUserQuotaDto,
123 UserQuotaResponseDto,
124 UserQuotaListResponseDto,
125 UserQuotaSummaryDto,
126};
127
128use serde::Serialize;
130
131#[cfg(feature = "openapi")]
132#[cfg(feature = "openapi")]
133use utoipa::ToSchema;
134
135#[derive(Debug, Clone, Default, serde::Deserialize)]
137#[cfg_attr(feature = "openapi", derive(ToSchema))]
138pub struct PaginationParams {
139 #[serde(default = "default_page")]
141 pub page: u32,
142 #[serde(default = "default_per_page")]
144 pub per_page: u32,
145 pub sort_by: Option<String>,
147 pub sort_order: Option<String>,
149}
150
151fn default_page() -> u32 { 1 }
152fn default_per_page() -> u32 { 20 }
153
154#[derive(Debug, Clone, Serialize)]
156#[cfg_attr(feature = "openapi", derive(ToSchema))]
157#[serde(rename_all = "camelCase")]
158pub struct ApiResponse<T> {
159 pub success: bool,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub data: Option<T>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub error: Option<ApiError>,
164}
165
166#[derive(Debug, Clone, Serialize)]
167#[cfg_attr(feature = "openapi", derive(ToSchema))]
168pub struct ApiError {
169 pub code: String,
170 pub message: String,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub details: Option<serde_json::Value>,
173}
174
175impl<T> ApiResponse<T> {
176 pub fn ok(data: T) -> Self {
177 Self { success: true, data: Some(data), error: None }
178 }
179
180 pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
181 Self {
182 success: false,
183 data: None,
184 error: Some(ApiError {
185 code: code.into(),
186 message: message.into(),
187 details: None,
188 }),
189 }
190 }
191}