backbone-accounting 0.14.0

GL, journals, ledger, reconciliation (extracted from bersihir)
Documentation
//! DTOs (Data Transfer Objects)
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides DTOs for the presentation layer,
//! with OpenAPI schema support.

pub mod account_dto;
pub mod accounting_post_dto;
pub mod cost_center_dto;
pub mod emv_qr_config_dto;
pub mod bank_check_sequence_dto;
pub mod printed_check_dto;
pub mod tax_tag_repair_run_dto;
pub mod financial_statement_dto;
pub mod fiscal_period_dto;
pub mod journal_dto;
pub mod journal_line_dto;
pub mod ledger_dto;
pub mod reconciliation_dto;
pub mod reconciliation_item_dto;
pub mod full_reconcile_dto;
pub mod partial_reconcile_dto;

// Re-exports
pub use account_dto::{
    CreateAccountDto,
    UpdateAccountDto,
    PatchAccountDto,
    AccountResponseDto,
    AccountListResponseDto,
    AccountSummaryDto,
};
pub use accounting_post_dto::{
    CreateAccountingPostDto,
    UpdateAccountingPostDto,
    PatchAccountingPostDto,
    AccountingPostResponseDto,
    AccountingPostListResponseDto,
    AccountingPostSummaryDto,
};
pub use cost_center_dto::{
    CreateCostCenterDto,
    UpdateCostCenterDto,
    PatchCostCenterDto,
    CostCenterResponseDto,
    CostCenterListResponseDto,
    CostCenterSummaryDto,
};
pub use emv_qr_config_dto::{
    CreateEmvQrConfigDto,
    UpdateEmvQrConfigDto,
    PatchEmvQrConfigDto,
    EmvQrConfigResponseDto,
    EmvQrConfigListResponseDto,
    EmvQrConfigSummaryDto,
};
pub use bank_check_sequence_dto::{
    CreateBankCheckSequenceDto,
    UpdateBankCheckSequenceDto,
    PatchBankCheckSequenceDto,
    BankCheckSequenceResponseDto,
    BankCheckSequenceListResponseDto,
    BankCheckSequenceSummaryDto,
};
pub use printed_check_dto::{
    CreatePrintedCheckDto,
    UpdatePrintedCheckDto,
    PatchPrintedCheckDto,
    PrintedCheckResponseDto,
    PrintedCheckListResponseDto,
    PrintedCheckSummaryDto,
};
pub use tax_tag_repair_run_dto::{
    CreateTaxTagRepairRunDto,
    UpdateTaxTagRepairRunDto,
    PatchTaxTagRepairRunDto,
    TaxTagRepairRunResponseDto,
    TaxTagRepairRunListResponseDto,
    TaxTagRepairRunSummaryDto,
};
pub use financial_statement_dto::{
    CreateFinancialStatementDto,
    UpdateFinancialStatementDto,
    PatchFinancialStatementDto,
    FinancialStatementResponseDto,
    FinancialStatementListResponseDto,
    FinancialStatementSummaryDto,
};
pub use fiscal_period_dto::{
    CreateFiscalPeriodDto,
    UpdateFiscalPeriodDto,
    PatchFiscalPeriodDto,
    FiscalPeriodResponseDto,
    FiscalPeriodListResponseDto,
    FiscalPeriodSummaryDto,
};
pub use journal_dto::{
    CreateJournalDto,
    UpdateJournalDto,
    PatchJournalDto,
    JournalResponseDto,
    JournalListResponseDto,
    JournalSummaryDto,
};
pub use journal_line_dto::{
    CreateJournalLineDto,
    UpdateJournalLineDto,
    PatchJournalLineDto,
    JournalLineResponseDto,
    JournalLineListResponseDto,
    JournalLineSummaryDto,
};
pub use ledger_dto::{
    CreateLedgerDto,
    UpdateLedgerDto,
    PatchLedgerDto,
    LedgerResponseDto,
    LedgerListResponseDto,
    LedgerSummaryDto,
};
pub use reconciliation_dto::{
    CreateReconciliationDto,
    UpdateReconciliationDto,
    PatchReconciliationDto,
    ReconciliationResponseDto,
    ReconciliationListResponseDto,
    ReconciliationSummaryDto,
};
pub use reconciliation_item_dto::{
    CreateReconciliationItemDto,
    UpdateReconciliationItemDto,
    PatchReconciliationItemDto,
    ReconciliationItemResponseDto,
    ReconciliationItemListResponseDto,
    ReconciliationItemSummaryDto,
};
pub use full_reconcile_dto::{
    CreateFullReconcileDto,
    UpdateFullReconcileDto,
    PatchFullReconcileDto,
    FullReconcileResponseDto,
    FullReconcileListResponseDto,
    FullReconcileSummaryDto,
};
pub use partial_reconcile_dto::{
    CreatePartialReconcileDto,
    UpdatePartialReconcileDto,
    PatchPartialReconcileDto,
    PartialReconcileResponseDto,
    PartialReconcileListResponseDto,
    PartialReconcileSummaryDto,
};

// 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,
            }),
        }
    }
}