diff options
| author | Joe Carstairs <me@joeac.net> | 2024-11-17 12:16:19 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-11-17 12:20:48 +0000 |
| commit | 99fa72e2b9d572e00cd232bd55a3fa24722c3134 (patch) | |
| tree | 6b50ce600fffa07a0c21b7f14d2447fe5ac3c2ed /rust/schist_actualbudget_importer/src/main.rs | |
| parent | 10f071447594f2bdcec84a461df9ad648f71f44b (diff) | |
Refactors workspace
Diffstat (limited to 'rust/schist_actualbudget_importer/src/main.rs')
| -rw-r--r-- | rust/schist_actualbudget_importer/src/main.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/rust/schist_actualbudget_importer/src/main.rs b/rust/schist_actualbudget_importer/src/main.rs new file mode 100644 index 0000000..ebf5353 --- /dev/null +++ b/rust/schist_actualbudget_importer/src/main.rs @@ -0,0 +1,50 @@ +pub mod models; +pub mod queries; +pub mod schema; +pub mod transformers; + +use anyhow::Result; +use schist_models::{account::Account, budget_update::BudgetUpdate, category::Category, category_transfer::CategoryTransfer, transaction::Transaction, transaction_categorisation::TransactionCategorisation}; +use 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: Vec<Account> = + transformers::transform_accounts(&actualbudget_accounts, &first_transaction_date); + let categories: Vec<Category> = + transformers::transform_categories(&actualbudget_categories); + let budget_updates: Vec<BudgetUpdate> = + transformers::transform_budget_updates(&actualbudget_zero_budgets)?; + let (transactions, transaction_categorisations): (Vec<Transaction>, Vec<TransactionCategorisation>) = + transformers::transform_transactions( + &actualbudget_transactions, + &actualbudget_category_transfers_account, + )?; + let category_transfers: Vec<CategoryTransfer> = 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(()) +} |
