Skip to main content

backbone_accounting/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 OpenAPI schema support.
7
8pub mod account_dto;
9pub mod accounting_post_dto;
10pub mod cost_center_dto;
11pub mod emv_qr_config_dto;
12pub mod bank_check_sequence_dto;
13pub mod printed_check_dto;
14pub mod tax_tag_repair_run_dto;
15pub mod financial_statement_dto;
16pub mod fiscal_period_dto;
17pub mod journal_dto;
18pub mod journal_line_dto;
19pub mod ledger_dto;
20pub mod reconciliation_dto;
21pub mod reconciliation_item_dto;
22pub mod full_reconcile_dto;
23pub mod partial_reconcile_dto;
24
25// Re-exports
26pub use account_dto::{
27    CreateAccountDto,
28    UpdateAccountDto,
29    PatchAccountDto,
30    AccountResponseDto,
31    AccountListResponseDto,
32    AccountSummaryDto,
33};
34pub use accounting_post_dto::{
35    CreateAccountingPostDto,
36    UpdateAccountingPostDto,
37    PatchAccountingPostDto,
38    AccountingPostResponseDto,
39    AccountingPostListResponseDto,
40    AccountingPostSummaryDto,
41};
42pub use cost_center_dto::{
43    CreateCostCenterDto,
44    UpdateCostCenterDto,
45    PatchCostCenterDto,
46    CostCenterResponseDto,
47    CostCenterListResponseDto,
48    CostCenterSummaryDto,
49};
50pub use emv_qr_config_dto::{
51    CreateEmvQrConfigDto,
52    UpdateEmvQrConfigDto,
53    PatchEmvQrConfigDto,
54    EmvQrConfigResponseDto,
55    EmvQrConfigListResponseDto,
56    EmvQrConfigSummaryDto,
57};
58pub use bank_check_sequence_dto::{
59    CreateBankCheckSequenceDto,
60    UpdateBankCheckSequenceDto,
61    PatchBankCheckSequenceDto,
62    BankCheckSequenceResponseDto,
63    BankCheckSequenceListResponseDto,
64    BankCheckSequenceSummaryDto,
65};
66pub use printed_check_dto::{
67    CreatePrintedCheckDto,
68    UpdatePrintedCheckDto,
69    PatchPrintedCheckDto,
70    PrintedCheckResponseDto,
71    PrintedCheckListResponseDto,
72    PrintedCheckSummaryDto,
73};
74pub use tax_tag_repair_run_dto::{
75    CreateTaxTagRepairRunDto,
76    UpdateTaxTagRepairRunDto,
77    PatchTaxTagRepairRunDto,
78    TaxTagRepairRunResponseDto,
79    TaxTagRepairRunListResponseDto,
80    TaxTagRepairRunSummaryDto,
81};
82pub use financial_statement_dto::{
83    CreateFinancialStatementDto,
84    UpdateFinancialStatementDto,
85    PatchFinancialStatementDto,
86    FinancialStatementResponseDto,
87    FinancialStatementListResponseDto,
88    FinancialStatementSummaryDto,
89};
90pub use fiscal_period_dto::{
91    CreateFiscalPeriodDto,
92    UpdateFiscalPeriodDto,
93    PatchFiscalPeriodDto,
94    FiscalPeriodResponseDto,
95    FiscalPeriodListResponseDto,
96    FiscalPeriodSummaryDto,
97};
98pub use journal_dto::{
99    CreateJournalDto,
100    UpdateJournalDto,
101    PatchJournalDto,
102    JournalResponseDto,
103    JournalListResponseDto,
104    JournalSummaryDto,
105};
106pub use journal_line_dto::{
107    CreateJournalLineDto,
108    UpdateJournalLineDto,
109    PatchJournalLineDto,
110    JournalLineResponseDto,
111    JournalLineListResponseDto,
112    JournalLineSummaryDto,
113};
114pub use ledger_dto::{
115    CreateLedgerDto,
116    UpdateLedgerDto,
117    PatchLedgerDto,
118    LedgerResponseDto,
119    LedgerListResponseDto,
120    LedgerSummaryDto,
121};
122pub use reconciliation_dto::{
123    CreateReconciliationDto,
124    UpdateReconciliationDto,
125    PatchReconciliationDto,
126    ReconciliationResponseDto,
127    ReconciliationListResponseDto,
128    ReconciliationSummaryDto,
129};
130pub use reconciliation_item_dto::{
131    CreateReconciliationItemDto,
132    UpdateReconciliationItemDto,
133    PatchReconciliationItemDto,
134    ReconciliationItemResponseDto,
135    ReconciliationItemListResponseDto,
136    ReconciliationItemSummaryDto,
137};
138pub use full_reconcile_dto::{
139    CreateFullReconcileDto,
140    UpdateFullReconcileDto,
141    PatchFullReconcileDto,
142    FullReconcileResponseDto,
143    FullReconcileListResponseDto,
144    FullReconcileSummaryDto,
145};
146pub use partial_reconcile_dto::{
147    CreatePartialReconcileDto,
148    UpdatePartialReconcileDto,
149    PatchPartialReconcileDto,
150    PartialReconcileResponseDto,
151    PartialReconcileListResponseDto,
152    PartialReconcileSummaryDto,
153};
154
155// Common pagination types
156use serde::Serialize;
157
158#[cfg(feature = "openapi")]
159#[cfg(feature = "openapi")]
160use utoipa::ToSchema;
161
162/// Pagination parameters for list requests
163#[derive(Debug, Clone, Default, serde::Deserialize)]
164#[cfg_attr(feature = "openapi", derive(ToSchema))]
165pub struct PaginationParams {
166    /// Page number (1-indexed)
167    #[serde(default = "default_page")]
168    pub page: u32,
169    /// Items per page
170    #[serde(default = "default_per_page")]
171    pub per_page: u32,
172    /// Field to sort by
173    pub sort_by: Option<String>,
174    /// Sort order (asc/desc)
175    pub sort_order: Option<String>,
176}
177
178fn default_page() -> u32 { 1 }
179fn default_per_page() -> u32 { 20 }
180
181/// API response wrapper
182#[derive(Debug, Clone, Serialize)]
183#[cfg_attr(feature = "openapi", derive(ToSchema))]
184#[serde(rename_all = "camelCase")]
185pub struct ApiResponse<T> {
186    pub success: bool,
187    #[serde(skip_serializing_if = "Option::is_none")]
188    pub data: Option<T>,
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub error: Option<ApiError>,
191}
192
193#[derive(Debug, Clone, Serialize)]
194#[cfg_attr(feature = "openapi", derive(ToSchema))]
195pub struct ApiError {
196    pub code: String,
197    pub message: String,
198    #[serde(skip_serializing_if = "Option::is_none")]
199    pub details: Option<serde_json::Value>,
200}
201
202impl<T> ApiResponse<T> {
203    pub fn ok(data: T) -> Self {
204        Self { success: true, data: Some(data), error: None }
205    }
206
207    pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
208        Self {
209            success: false,
210            data: None,
211            error: Some(ApiError {
212                code: code.into(),
213                message: message.into(),
214                details: None,
215            }),
216        }
217    }
218}