backbone-banking 0.7.1

Cash & bank — bank/account master, statement import, reconciliation, and clearing postings (5th GL producer)
Documentation
//! DTOs (Data Transfer Objects)
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides DTOs for the presentation layer,
//! with validation and OpenAPI schema support.

pub mod bank_dto;
pub mod bank_account_dto;
pub mod bank_clearance_dto;
pub mod bank_reconciliation_dto;
pub mod bank_statement_import_dto;
pub mod bank_transaction_dto;
pub mod fx_gain_loss_dto;
pub mod reconcile_preset_dto;

// Re-exports
pub use bank_dto::{
    CreateBankDto,
    UpdateBankDto,
    PatchBankDto,
    BankResponseDto,
    BankListResponseDto,
    BankSummaryDto,
};
pub use bank_account_dto::{
    CreateBankAccountDto,
    UpdateBankAccountDto,
    PatchBankAccountDto,
    BankAccountResponseDto,
    BankAccountListResponseDto,
    BankAccountSummaryDto,
};
pub use bank_clearance_dto::{
    CreateBankClearanceDto,
    UpdateBankClearanceDto,
    PatchBankClearanceDto,
    BankClearanceResponseDto,
    BankClearanceListResponseDto,
    BankClearanceSummaryDto,
};
pub use bank_reconciliation_dto::{
    CreateBankReconciliationDto,
    UpdateBankReconciliationDto,
    PatchBankReconciliationDto,
    BankReconciliationResponseDto,
    BankReconciliationListResponseDto,
    BankReconciliationSummaryDto,
};
pub use bank_statement_import_dto::{
    CreateBankStatementImportDto,
    UpdateBankStatementImportDto,
    PatchBankStatementImportDto,
    BankStatementImportResponseDto,
    BankStatementImportListResponseDto,
    BankStatementImportSummaryDto,
};
pub use bank_transaction_dto::{
    CreateBankTransactionDto,
    UpdateBankTransactionDto,
    PatchBankTransactionDto,
    BankTransactionResponseDto,
    BankTransactionListResponseDto,
    BankTransactionSummaryDto,
};
pub use fx_gain_loss_dto::{
    CreateFxGainLossDto,
    UpdateFxGainLossDto,
    PatchFxGainLossDto,
    FxGainLossResponseDto,
    FxGainLossListResponseDto,
    FxGainLossSummaryDto,
};
pub use reconcile_preset_dto::{
    CreateReconcilePresetDto,
    UpdateReconcilePresetDto,
    PatchReconcilePresetDto,
    ReconcilePresetResponseDto,
    ReconcilePresetListResponseDto,
    ReconcilePresetSummaryDto,
};

// Common pagination types
use serde::Serialize;

#[cfg(feature = "openapi")]
#[cfg(feature = "openapi")]
use utoipa::ToSchema;

/// Pagination parameters for list requests
#[derive(Debug, Clone, Default, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct PaginationParams {
    /// Page number (1-indexed)
    #[serde(default = "default_page")]
    pub page: u32,
    /// Items per page
    #[serde(default = "default_per_page")]
    pub per_page: u32,
    /// Field to sort by
    pub sort_by: Option<String>,
    /// Sort order (asc/desc)
    pub sort_order: Option<String>,
}

fn default_page() -> u32 { 1 }
fn default_per_page() -> u32 { 20 }

/// API response wrapper
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
#[serde(rename_all = "camelCase")]
pub struct ApiResponse<T> {
    pub success: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<T>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub error: Option<ApiError>,
}

#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct ApiError {
    pub code: String,
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub details: Option<serde_json::Value>,
}

impl<T> ApiResponse<T> {
    pub fn ok(data: T) -> Self {
        Self { success: true, data: Some(data), error: None }
    }

    pub fn err(code: impl Into<String>, message: impl Into<String>) -> Self {
        Self {
            success: false,
            data: None,
            error: Some(ApiError {
                code: code.into(),
                message: message.into(),
                details: None,
            }),
        }
    }
}