diff options
Diffstat (limited to 'rust/actualbudget_importer/src/main.rs')
| -rw-r--r-- | rust/actualbudget_importer/src/main.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/rust/actualbudget_importer/src/main.rs b/rust/actualbudget_importer/src/main.rs new file mode 100644 index 0000000..cb69bb5 --- /dev/null +++ b/rust/actualbudget_importer/src/main.rs @@ -0,0 +1,45 @@ +pub mod models; +pub mod queries; +pub mod schema; +pub mod transformers; + +use anyhow::Result; +use budgeting_app_core::queries as budgeting_app_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, + ); + + budgeting_app_queries::clear::clear(connection_dest)?; + budgeting_app_queries::accounts::insert_accounts(&accounts, connection_dest)?; + budgeting_app_queries::categories::insert_categories(&categories, connection_dest)?; + budgeting_app_queries::budget_updates::insert_budget_updates(&budget_updates, connection_dest)?; + budgeting_app_queries::transactions::insert_transactions(&transactions, connection_dest)?; + budgeting_app_queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection_dest)?; + budgeting_app_queries::category_transfers::insert_category_transfers(&category_transfers, connection_dest)?; + + Ok(()) +} |
