summaryrefslogtreecommitdiff
path: root/actualbudget_to_schist_transformer/src/schist_state.rs
blob: 370a0e845c529f00599344305c7e4292f31934da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use anyhow::Result;
use diesel::SqliteConnection;
use schist_models::{
    account::Account, account_transfer::AccountTransfer, budget_drip::BudgetDrip, category::Category, category_transfer::CategoryTransfer, date_utc::DateUtc, transaction::Transaction, transaction_categorisation::TransactionCategorisation
};

pub struct SchistState {
    pub first_transaction_date: DateUtc,
    pub accounts: Vec<Account>,
    pub account_transfers: Vec<AccountTransfer>,
    pub categories: Vec<Category>,
    pub budget_drips: Vec<BudgetDrip>,
    pub transactions: Vec<Transaction>,
    pub transaction_categorisations: Vec<TransactionCategorisation>,
    pub category_transfers: Vec<CategoryTransfer>,
}

pub fn export_schist_state(schist_state: &SchistState, schist_connection: &mut SqliteConnection) -> Result<()> {
    schist_queries::clear::clear(schist_connection)?;
    schist_queries::accounts::insert_accounts(&schist_state.accounts, schist_connection)?;
    schist_queries::account_transfers::insert_account_transfers(&schist_state.account_transfers, schist_connection)?;
    schist_queries::categories::insert_categories(&schist_state.categories, schist_connection)?;
    schist_queries::budget_drips::insert_budget_drips(&schist_state.budget_drips, schist_connection)?;
    schist_queries::transactions::insert_transactions(&schist_state.transactions, schist_connection)?;
    schist_queries::transaction_categorisations::insert_transaction_categorisations(&schist_state.transaction_categorisations, schist_connection)?;
    schist_queries::category_transfers::insert_category_transfers(&schist_state.category_transfers, schist_connection)?;
    Ok(())
}