backbone_integrations/presentation/dto/
mod.rs1pub mod integration_connector_dto;
9pub mod integration_account_dto;
10pub mod integration_event_dto;
11
12pub use integration_connector_dto::{
14 CreateIntegrationConnectorDto,
15 UpdateIntegrationConnectorDto,
16 PatchIntegrationConnectorDto,
17 IntegrationConnectorResponseDto,
18 IntegrationConnectorListResponseDto,
19 IntegrationConnectorSummaryDto,
20};
21pub use integration_account_dto::{
22 CreateIntegrationAccountDto,
23 UpdateIntegrationAccountDto,
24 PatchIntegrationAccountDto,
25 IntegrationAccountResponseDto,
26 IntegrationAccountListResponseDto,
27 IntegrationAccountSummaryDto,
28};
29pub use integration_event_dto::{
30 CreateIntegrationEventDto,
31 UpdateIntegrationEventDto,
32 PatchIntegrationEventDto,
33 IntegrationEventResponseDto,
34 IntegrationEventListResponseDto,
35 IntegrationEventSummaryDto,
36};
37
38use serde::Serialize;
40
41#[cfg(feature = "openapi")]
42#[cfg(feature = "openapi")]
43use utoipa::ToSchema;
44
45#[derive(Debug, Clone, Default, serde::Deserialize)]
47#[cfg_attr(feature = "openapi", derive(ToSchema))]
48pub struct PaginationParams {
49 #[serde(default = "default_page")]
51 pub page: u32,
52 #[serde(default = "default_per_page")]
54 pub per_page: u32,
55 pub sort_by: Option<String>,
57 pub sort_order: Option<String>,
59}
60
61fn default_page() -> u32 { 1 }
62fn default_per_page() -> u32 { 20 }
63
64#[derive(Debug, Clone, Serialize)]
66#[cfg_attr(feature = "openapi", derive(ToSchema))]
67#[serde(rename_all = "camelCase")]
68pub struct ApiResponse<T> {
69 pub success: bool,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub data: Option<T>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub error: Option<ApiError>,
74}
75
76#[derive(Debug, Clone, Serialize)]
77#[cfg_attr(feature = "openapi", derive(ToSchema))]
78pub struct ApiError {
79 pub code: String,
80 pub message: String,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub details: Option<serde_json::Value>,
83}
84
85impl<T> ApiResponse<T> {
86 pub fn ok(data: T) -> Self {
87 Self { success: true, data: Some(data), error: None }
88 }
89
90 pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
91 Self {
92 success: false,
93 data: None,
94 error: Some(ApiError {
95 code: code.into(),
96 message: message.into(),
97 details: None,
98 }),
99 }
100 }
101}