Skip to main content

backbone_bucket/presentation/dto/
mod.rs

1//! DTOs (Data Transfer Objects)
2//!
3//! Generated by metaphor-schema. Do not edit manually.
4//!
5//! This module provides DTOs for the presentation layer,
6//! with validation and OpenAPI schema support.
7
8pub 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
22// Re-exports
23pub 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
128// Common pagination types
129use serde::Serialize;
130
131#[cfg(feature = "openapi")]
132#[cfg(feature = "openapi")]
133use utoipa::ToSchema;
134
135/// Pagination parameters for list requests
136#[derive(Debug, Clone, Default, serde::Deserialize)]
137#[cfg_attr(feature = "openapi", derive(ToSchema))]
138pub struct PaginationParams {
139    /// Page number (1-indexed)
140    #[serde(default = "default_page")]
141    pub page: u32,
142    /// Items per page
143    #[serde(default = "default_per_page")]
144    pub per_page: u32,
145    /// Field to sort by
146    pub sort_by: Option<String>,
147    /// Sort order (asc/desc)
148    pub sort_order: Option<String>,
149}
150
151fn default_page() -> u32 { 1 }
152fn default_per_page() -> u32 { 20 }
153
154/// API response wrapper
155#[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}