backbone-accounting 0.10.1

GL, journals, ledger, reconciliation (extracted from bersihir)
Documentation
//! Accounting Module Handlers
//!
//! Generated by metaphor-schema. Do not edit manually.
//!
//! This module provides:
//! - AppState dependency injection container
//! - Custom handler integration points

use std::sync::Arc;

// Import all services
use crate::application::service::AccountService;
use crate::application::service::AccountingPostService;
use crate::application::service::CostCenterService;
use crate::application::service::EmvQrConfigService;
use crate::application::service::BankCheckSequenceService;
use crate::application::service::PrintedCheckService;
use crate::application::service::TaxTagRepairRunService;
use crate::application::service::FinancialStatementService;
use crate::application::service::FiscalPeriodService;
use crate::application::service::JournalService;
use crate::application::service::JournalLineService;
use crate::application::service::LedgerService;
use crate::application::service::ReconciliationService;
use crate::application::service::ReconciliationItemService;
use crate::application::service::FullReconcileService;
use crate::application::service::PartialReconcileService;

/// Application state for dependency injection.
///
/// This struct holds references to all module services
/// and is passed to HTTP handlers via Axum's State extractor.
///
/// # Example
///
/// ```ignore
/// use axum::extract::State;
///
/// async fn custom_handler(
///     State(state): State<AppState>,
/// ) -> impl IntoResponse {
///     // Access services via state
/// }
/// ```
#[derive(Clone)]
pub struct AppState {
    /// Account service
    pub account_service: Arc<AccountService>,
    /// AccountingPost service
    pub accounting_post_service: Arc<AccountingPostService>,
    /// CostCenter service
    pub cost_center_service: Arc<CostCenterService>,
    /// EmvQrConfig service
    pub emv_qr_config_service: Arc<EmvQrConfigService>,
    /// BankCheckSequence service
    pub bank_check_sequence_service: Arc<BankCheckSequenceService>,
    /// PrintedCheck service
    pub printed_check_service: Arc<PrintedCheckService>,
    /// TaxTagRepairRun service
    pub tax_tag_repair_run_service: Arc<TaxTagRepairRunService>,
    /// FinancialStatement service
    pub financial_statement_service: Arc<FinancialStatementService>,
    /// FiscalPeriod service
    pub fiscal_period_service: Arc<FiscalPeriodService>,
    /// Journal service
    pub journal_service: Arc<JournalService>,
    /// JournalLine service
    pub journal_line_service: Arc<JournalLineService>,
    /// Ledger service
    pub ledger_service: Arc<LedgerService>,
    /// Reconciliation service
    pub reconciliation_service: Arc<ReconciliationService>,
    /// ReconciliationItem service
    pub reconciliation_item_service: Arc<ReconciliationItemService>,
    /// FullReconcile service
    pub full_reconcile_service: Arc<FullReconcileService>,
    /// PartialReconcile service
    pub partial_reconcile_service: Arc<PartialReconcileService>,
}

impl AppState {
    /// Create a new AppState with all services.
    pub fn new(
        account_service: Arc<AccountService>,
        accounting_post_service: Arc<AccountingPostService>,
        cost_center_service: Arc<CostCenterService>,
        emv_qr_config_service: Arc<EmvQrConfigService>,
        bank_check_sequence_service: Arc<BankCheckSequenceService>,
        printed_check_service: Arc<PrintedCheckService>,
        tax_tag_repair_run_service: Arc<TaxTagRepairRunService>,
        financial_statement_service: Arc<FinancialStatementService>,
        fiscal_period_service: Arc<FiscalPeriodService>,
        journal_service: Arc<JournalService>,
        journal_line_service: Arc<JournalLineService>,
        ledger_service: Arc<LedgerService>,
        reconciliation_service: Arc<ReconciliationService>,
        reconciliation_item_service: Arc<ReconciliationItemService>,
        full_reconcile_service: Arc<FullReconcileService>,
        partial_reconcile_service: Arc<PartialReconcileService>
    ) -> Self {
        Self {
            account_service,
            accounting_post_service,
            cost_center_service,
            emv_qr_config_service,
            bank_check_sequence_service,
            printed_check_service,
            tax_tag_repair_run_service,
            financial_statement_service,
            fiscal_period_service,
            journal_service,
            journal_line_service,
            ledger_service,
            reconciliation_service,
            reconciliation_item_service,
            full_reconcile_service,
            partial_reconcile_service,
        }
    }

    /// Create AppState from module instance.
    pub fn from_module(module: &crate::AccountingModule) -> Self {
        Self {
            account_service: module.account_service.clone(),
            accounting_post_service: module.accounting_post_service.clone(),
            cost_center_service: module.cost_center_service.clone(),
            emv_qr_config_service: module.emv_qr_config_service.clone(),
            bank_check_sequence_service: module.bank_check_sequence_service.clone(),
            printed_check_service: module.printed_check_service.clone(),
            tax_tag_repair_run_service: module.tax_tag_repair_run_service.clone(),
            financial_statement_service: module.financial_statement_service.clone(),
            fiscal_period_service: module.fiscal_period_service.clone(),
            journal_service: module.journal_service.clone(),
            journal_line_service: module.journal_line_service.clone(),
            ledger_service: module.ledger_service.clone(),
            reconciliation_service: module.reconciliation_service.clone(),
            reconciliation_item_service: module.reconciliation_item_service.clone(),
            full_reconcile_service: module.full_reconcile_service.clone(),
            partial_reconcile_service: module.partial_reconcile_service.clone(),
        }
    }
}

/// Builder for AppState.
///
/// Allows incremental construction of AppState.
#[derive(Default)]
pub struct AppStateBuilder {
    account_service: Option<Arc<AccountService>>,
    accounting_post_service: Option<Arc<AccountingPostService>>,
    cost_center_service: Option<Arc<CostCenterService>>,
    emv_qr_config_service: Option<Arc<EmvQrConfigService>>,
    bank_check_sequence_service: Option<Arc<BankCheckSequenceService>>,
    printed_check_service: Option<Arc<PrintedCheckService>>,
    tax_tag_repair_run_service: Option<Arc<TaxTagRepairRunService>>,
    financial_statement_service: Option<Arc<FinancialStatementService>>,
    fiscal_period_service: Option<Arc<FiscalPeriodService>>,
    journal_service: Option<Arc<JournalService>>,
    journal_line_service: Option<Arc<JournalLineService>>,
    ledger_service: Option<Arc<LedgerService>>,
    reconciliation_service: Option<Arc<ReconciliationService>>,
    reconciliation_item_service: Option<Arc<ReconciliationItemService>>,
    full_reconcile_service: Option<Arc<FullReconcileService>>,
    partial_reconcile_service: Option<Arc<PartialReconcileService>>,
}

impl AppStateBuilder {
    /// Create a new builder.
    pub fn new() -> Self {
        Self::default()
    }

    /// Set the Account service.
    pub fn with_account_service(mut self, service: Arc<AccountService>) -> Self {
        self.account_service = Some(service);
        self
    }

    /// Set the AccountingPost service.
    pub fn with_accounting_post_service(mut self, service: Arc<AccountingPostService>) -> Self {
        self.accounting_post_service = Some(service);
        self
    }

    /// Set the CostCenter service.
    pub fn with_cost_center_service(mut self, service: Arc<CostCenterService>) -> Self {
        self.cost_center_service = Some(service);
        self
    }

    /// Set the EmvQrConfig service.
    pub fn with_emv_qr_config_service(mut self, service: Arc<EmvQrConfigService>) -> Self {
        self.emv_qr_config_service = Some(service);
        self
    }

    /// Set the BankCheckSequence service.
    pub fn with_bank_check_sequence_service(mut self, service: Arc<BankCheckSequenceService>) -> Self {
        self.bank_check_sequence_service = Some(service);
        self
    }

    /// Set the PrintedCheck service.
    pub fn with_printed_check_service(mut self, service: Arc<PrintedCheckService>) -> Self {
        self.printed_check_service = Some(service);
        self
    }

    /// Set the TaxTagRepairRun service.
    pub fn with_tax_tag_repair_run_service(mut self, service: Arc<TaxTagRepairRunService>) -> Self {
        self.tax_tag_repair_run_service = Some(service);
        self
    }

    /// Set the FinancialStatement service.
    pub fn with_financial_statement_service(mut self, service: Arc<FinancialStatementService>) -> Self {
        self.financial_statement_service = Some(service);
        self
    }

    /// Set the FiscalPeriod service.
    pub fn with_fiscal_period_service(mut self, service: Arc<FiscalPeriodService>) -> Self {
        self.fiscal_period_service = Some(service);
        self
    }

    /// Set the Journal service.
    pub fn with_journal_service(mut self, service: Arc<JournalService>) -> Self {
        self.journal_service = Some(service);
        self
    }

    /// Set the JournalLine service.
    pub fn with_journal_line_service(mut self, service: Arc<JournalLineService>) -> Self {
        self.journal_line_service = Some(service);
        self
    }

    /// Set the Ledger service.
    pub fn with_ledger_service(mut self, service: Arc<LedgerService>) -> Self {
        self.ledger_service = Some(service);
        self
    }

    /// Set the Reconciliation service.
    pub fn with_reconciliation_service(mut self, service: Arc<ReconciliationService>) -> Self {
        self.reconciliation_service = Some(service);
        self
    }

    /// Set the ReconciliationItem service.
    pub fn with_reconciliation_item_service(mut self, service: Arc<ReconciliationItemService>) -> Self {
        self.reconciliation_item_service = Some(service);
        self
    }

    /// Set the FullReconcile service.
    pub fn with_full_reconcile_service(mut self, service: Arc<FullReconcileService>) -> Self {
        self.full_reconcile_service = Some(service);
        self
    }

    /// Set the PartialReconcile service.
    pub fn with_partial_reconcile_service(mut self, service: Arc<PartialReconcileService>) -> Self {
        self.partial_reconcile_service = Some(service);
        self
    }

    /// Build the AppState.
    ///
    /// # Panics
    ///
    /// Panics if any required service is not set.
    pub fn build(self) -> AppState {
        AppState {
            account_service: self.account_service.expect("account_service is required"),
            accounting_post_service: self.accounting_post_service.expect("accounting_post_service is required"),
            cost_center_service: self.cost_center_service.expect("cost_center_service is required"),
            emv_qr_config_service: self.emv_qr_config_service.expect("emv_qr_config_service is required"),
            bank_check_sequence_service: self.bank_check_sequence_service.expect("bank_check_sequence_service is required"),
            printed_check_service: self.printed_check_service.expect("printed_check_service is required"),
            tax_tag_repair_run_service: self.tax_tag_repair_run_service.expect("tax_tag_repair_run_service is required"),
            financial_statement_service: self.financial_statement_service.expect("financial_statement_service is required"),
            fiscal_period_service: self.fiscal_period_service.expect("fiscal_period_service is required"),
            journal_service: self.journal_service.expect("journal_service is required"),
            journal_line_service: self.journal_line_service.expect("journal_line_service is required"),
            ledger_service: self.ledger_service.expect("ledger_service is required"),
            reconciliation_service: self.reconciliation_service.expect("reconciliation_service is required"),
            reconciliation_item_service: self.reconciliation_item_service.expect("reconciliation_item_service is required"),
            full_reconcile_service: self.full_reconcile_service.expect("full_reconcile_service is required"),
            partial_reconcile_service: self.partial_reconcile_service.expect("partial_reconcile_service is required"),
        }
    }
}