summaryrefslogtreecommitdiff
path: root/rust/actualbudget_importer/src/main.rs
blob: 78c64f487863d2137afc394a7740e0ffaba67393 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
pub mod models;
pub mod queries;
pub mod schema;
pub mod transformers;

use anyhow::Result;
use schist_core::queries as schist_queries;
use diesel::{Connection, SqliteConnection};
use queries::{actualbudget_accounts::{get_all_actualbudget_accounts, get_category_transfers_account}, actualbudget_categories::get_all_actualbudget_categories, actualbudget_transactions::{get_all_actualbudget_transactions, get_first_actualbudget_transaction_date}, actualbudget_zero_budgets::get_all_actualbudget_zero_budgets};

fn main() -> Result<()> {
    let connection_src = &mut SqliteConnection::establish("in.sqlite").unwrap();
    let connection_dest = &mut SqliteConnection::establish("out.sqlite").unwrap();

    let actualbudget_first_transaction_date = get_first_actualbudget_transaction_date(connection_src)?;
    let actualbudget_accounts = get_all_actualbudget_accounts(connection_src)?;
    let actualbudget_categories = get_all_actualbudget_categories(connection_src)?;
    let actualbudget_zero_budgets = get_all_actualbudget_zero_budgets(connection_src)?;
    let actualbudget_category_transfers_account = get_category_transfers_account(connection_src)?;
    let actualbudget_transactions = get_all_actualbudget_transactions(connection_src)?;

    let first_transaction_date = transformers::transform_date(&actualbudget_first_transaction_date)?;
    let accounts =
        transformers::transform_accounts(&actualbudget_accounts, &first_transaction_date);
    let categories = transformers::transform_categories(&actualbudget_categories);
    let budget_updates = transformers::transform_budget_updates(&actualbudget_zero_budgets)?;
    let (transactions, transaction_categorisations) = transformers::transform_transactions(
        &actualbudget_transactions,
        &actualbudget_category_transfers_account,
    )?;
    let category_transfers = transformers::transform_category_transfers(
        &actualbudget_transactions,
        &actualbudget_category_transfers_account,
    );

    schist_queries::clear::clear(connection_dest)?;
    schist_queries::accounts::insert_accounts(&accounts, connection_dest)?;
    schist_queries::categories::insert_categories(&categories, connection_dest)?;
    schist_queries::budget_updates::insert_budget_updates(&budget_updates, connection_dest)?;
    schist_queries::transactions::insert_transactions(&transactions, connection_dest)?;
    schist_queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection_dest)?;
    schist_queries::category_transfers::insert_category_transfers(&category_transfers, connection_dest)?;

    Ok(())
}