summaryrefslogtreecommitdiff
path: root/importers/actualbudget/src/main.rs
blob: 495216ed1f318c49a2a74e402ab98b256e4f0ad8 (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
46
47
48
49
50
51
52
53
54
55
56
57
pub mod getters;
pub mod inserters;
pub mod models;
pub mod transformers;

use getters::*;
use inserters::*;
use sqlite::Connection;

fn main() {
    let connection_src = sqlite::open("in.sqlite").unwrap();
    let connection_dest = sqlite::open("out.sqlite").unwrap();

    let actualbudget_first_transaction_date = get_first_transaction_date(&connection_src);
    let actualbudget_accounts = get_accounts(&connection_src);
    let actualbudget_categories = get_categories(&connection_src);
    let actualbudget_zero_budgets = get_zero_budgets(&connection_src);
    let actualbudget_category_transfers_account = get_category_transfers_account(&connection_src);
    let actualbudget_transactions = get_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,
    );

    clear_destination(&connection_dest);
    insert_accounts(&connection_dest, &accounts);
    insert_categories(&connection_dest, &categories);
    insert_budget_updates(&connection_dest, &budget_updates);
    insert_transactions(&connection_dest, &transactions);
    insert_transaction_categorisations(&connection_dest, &transaction_categorisations);
    insert_category_transfers(&connection_dest, &category_transfers);
}

fn clear_destination(connection: &Connection) {
    connection
        .execute(
            "
        delete from accounts;
        delete from budget_updates;
        delete from categories;
        delete from transaction_categorisations;
        delete from category_transfers;
        delete from transactions;
    ",
        )
        .unwrap();
}