summaryrefslogtreecommitdiff
path: root/rust/schist_actualbudget_importer/src/main.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-17 12:16:19 +0000
committerJoe Carstairs <me@joeac.net>2024-11-17 12:20:48 +0000
commit99fa72e2b9d572e00cd232bd55a3fa24722c3134 (patch)
tree6b50ce600fffa07a0c21b7f14d2447fe5ac3c2ed /rust/schist_actualbudget_importer/src/main.rs
parent10f071447594f2bdcec84a461df9ad648f71f44b (diff)
Refactors workspace
Diffstat (limited to 'rust/schist_actualbudget_importer/src/main.rs')
-rw-r--r--rust/schist_actualbudget_importer/src/main.rs50
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(())
+}