backbone_maintenance/presentation/dto/
mod.rs1pub mod maintenance_request_dto;
9pub mod maintenance_schedule_dto;
10pub mod maintenance_stage_dto;
11pub mod maintenance_visit_dto;
12pub mod maintenance_visit_part_dto;
13
14pub use maintenance_request_dto::{
16 CreateMaintenanceRequestDto,
17 UpdateMaintenanceRequestDto,
18 PatchMaintenanceRequestDto,
19 MaintenanceRequestResponseDto,
20 MaintenanceRequestListResponseDto,
21 MaintenanceRequestSummaryDto,
22};
23pub use maintenance_schedule_dto::{
24 CreateMaintenanceScheduleDto,
25 UpdateMaintenanceScheduleDto,
26 PatchMaintenanceScheduleDto,
27 MaintenanceScheduleResponseDto,
28 MaintenanceScheduleListResponseDto,
29 MaintenanceScheduleSummaryDto,
30};
31pub use maintenance_stage_dto::{
32 CreateMaintenanceStageDto,
33 UpdateMaintenanceStageDto,
34 PatchMaintenanceStageDto,
35 MaintenanceStageResponseDto,
36 MaintenanceStageListResponseDto,
37 MaintenanceStageSummaryDto,
38};
39pub use maintenance_visit_dto::{
40 CreateMaintenanceVisitDto,
41 UpdateMaintenanceVisitDto,
42 PatchMaintenanceVisitDto,
43 MaintenanceVisitResponseDto,
44 MaintenanceVisitListResponseDto,
45 MaintenanceVisitSummaryDto,
46};
47pub use maintenance_visit_part_dto::{
48 CreateMaintenanceVisitPartDto,
49 UpdateMaintenanceVisitPartDto,
50 PatchMaintenanceVisitPartDto,
51 MaintenanceVisitPartResponseDto,
52 MaintenanceVisitPartListResponseDto,
53 MaintenanceVisitPartSummaryDto,
54};
55
56use serde::Serialize;
58
59#[cfg(feature = "openapi")]
60#[cfg(feature = "openapi")]
61use utoipa::ToSchema;
62
63#[derive(Debug, Clone, Default, serde::Deserialize)]
65#[cfg_attr(feature = "openapi", derive(ToSchema))]
66pub struct PaginationParams {
67 #[serde(default = "default_page")]
69 pub page: u32,
70 #[serde(default = "default_per_page")]
72 pub per_page: u32,
73 pub sort_by: Option<String>,
75 pub sort_order: Option<String>,
77}
78
79fn default_page() -> u32 { 1 }
80fn default_per_page() -> u32 { 20 }
81
82#[derive(Debug, Clone, Serialize)]
84#[cfg_attr(feature = "openapi", derive(ToSchema))]
85#[serde(rename_all = "camelCase")]
86pub struct ApiResponse<T> {
87 pub success: bool,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub data: Option<T>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub error: Option<ApiError>,
92}
93
94#[derive(Debug, Clone, Serialize)]
95#[cfg_attr(feature = "openapi", derive(ToSchema))]
96pub struct ApiError {
97 pub code: String,
98 pub message: String,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub details: Option<serde_json::Value>,
101}
102
103impl<T> ApiResponse<T> {
104 pub fn ok(data: T) -> Self {
105 Self { success: true, data: Some(data), error: None }
106 }
107
108 pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
109 Self {
110 success: false,
111 data: None,
112 error: Some(ApiError {
113 code: code.into(),
114 message: message.into(),
115 details: None,
116 }),
117 }
118 }
119}