use std::sync::Arc;
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;
#[derive(Clone)]
pub struct AppState {
pub account_service: Arc<AccountService>,
pub accounting_post_service: Arc<AccountingPostService>,
pub cost_center_service: Arc<CostCenterService>,
pub emv_qr_config_service: Arc<EmvQrConfigService>,
pub bank_check_sequence_service: Arc<BankCheckSequenceService>,
pub printed_check_service: Arc<PrintedCheckService>,
pub tax_tag_repair_run_service: Arc<TaxTagRepairRunService>,
pub financial_statement_service: Arc<FinancialStatementService>,
pub fiscal_period_service: Arc<FiscalPeriodService>,
pub journal_service: Arc<JournalService>,
pub journal_line_service: Arc<JournalLineService>,
pub ledger_service: Arc<LedgerService>,
pub reconciliation_service: Arc<ReconciliationService>,
pub reconciliation_item_service: Arc<ReconciliationItemService>,
pub full_reconcile_service: Arc<FullReconcileService>,
pub partial_reconcile_service: Arc<PartialReconcileService>,
}
impl AppState {
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,
}
}
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(),
}
}
}
#[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 {
pub fn new() -> Self {
Self::default()
}
pub fn with_account_service(mut self, service: Arc<AccountService>) -> Self {
self.account_service = Some(service);
self
}
pub fn with_accounting_post_service(mut self, service: Arc<AccountingPostService>) -> Self {
self.accounting_post_service = Some(service);
self
}
pub fn with_cost_center_service(mut self, service: Arc<CostCenterService>) -> Self {
self.cost_center_service = Some(service);
self
}
pub fn with_emv_qr_config_service(mut self, service: Arc<EmvQrConfigService>) -> Self {
self.emv_qr_config_service = Some(service);
self
}
pub fn with_bank_check_sequence_service(mut self, service: Arc<BankCheckSequenceService>) -> Self {
self.bank_check_sequence_service = Some(service);
self
}
pub fn with_printed_check_service(mut self, service: Arc<PrintedCheckService>) -> Self {
self.printed_check_service = Some(service);
self
}
pub fn with_tax_tag_repair_run_service(mut self, service: Arc<TaxTagRepairRunService>) -> Self {
self.tax_tag_repair_run_service = Some(service);
self
}
pub fn with_financial_statement_service(mut self, service: Arc<FinancialStatementService>) -> Self {
self.financial_statement_service = Some(service);
self
}
pub fn with_fiscal_period_service(mut self, service: Arc<FiscalPeriodService>) -> Self {
self.fiscal_period_service = Some(service);
self
}
pub fn with_journal_service(mut self, service: Arc<JournalService>) -> Self {
self.journal_service = Some(service);
self
}
pub fn with_journal_line_service(mut self, service: Arc<JournalLineService>) -> Self {
self.journal_line_service = Some(service);
self
}
pub fn with_ledger_service(mut self, service: Arc<LedgerService>) -> Self {
self.ledger_service = Some(service);
self
}
pub fn with_reconciliation_service(mut self, service: Arc<ReconciliationService>) -> Self {
self.reconciliation_service = Some(service);
self
}
pub fn with_reconciliation_item_service(mut self, service: Arc<ReconciliationItemService>) -> Self {
self.reconciliation_item_service = Some(service);
self
}
pub fn with_full_reconcile_service(mut self, service: Arc<FullReconcileService>) -> Self {
self.full_reconcile_service = Some(service);
self
}
pub fn with_partial_reconcile_service(mut self, service: Arc<PartialReconcileService>) -> Self {
self.partial_reconcile_service = Some(service);
self
}
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"),
}
}
}