summaryrefslogtreecommitdiff
path: root/backend/importers
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-11-11 08:04:36 +0000
committerJoe Carstairs <me@joeac.net>2024-11-11 08:04:36 +0000
commit3c7218be1446f8cf914063b1c52c1cbdc8497c8c (patch)
treeee2bf1886157e76db5d354ffea57b2d8685df18d /backend/importers
parent6a0ae1fd4b8ff6fda6a5f0f8e85917d39ad23c7e (diff)
Update actualbudget importer
Diffstat (limited to 'backend/importers')
-rw-r--r--backend/importers/actualbudget/Cargo.lock32
-rw-r--r--backend/importers/actualbudget/src/main.rs26
-rw-r--r--backend/importers/actualbudget/src/queries/actualbudget_transactions/get_first_date.rs3
-rw-r--r--backend/importers/actualbudget/src/transformers.rs23
4 files changed, 58 insertions, 26 deletions
diff --git a/backend/importers/actualbudget/Cargo.lock b/backend/importers/actualbudget/Cargo.lock
index 1a461d5..edaab83 100644
--- a/backend/importers/actualbudget/Cargo.lock
+++ b/backend/importers/actualbudget/Cargo.lock
@@ -46,6 +46,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"chrono",
+ "derive_builder",
"diesel",
"diesel_migrations",
"serde",
@@ -138,6 +139,37 @@ dependencies = [
]
[[package]]
+name = "derive_builder"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
+dependencies = [
+ "derive_builder_core",
+ "syn",
+]
+
+[[package]]
name = "diesel"
version = "2.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/backend/importers/actualbudget/src/main.rs b/backend/importers/actualbudget/src/main.rs
index 84f5102..cb69bb5 100644
--- a/backend/importers/actualbudget/src/main.rs
+++ b/backend/importers/actualbudget/src/main.rs
@@ -12,12 +12,12 @@ 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).map_err(|e| e.to_string())?;
- let actualbudget_accounts = get_all_actualbudget_accounts(connection_src).map_err(|e| e.to_string())?;
- let actualbudget_categories = get_all_actualbudget_categories(connection_src).map_err(|e| e.to_string())?;
- let actualbudget_zero_budgets = get_all_actualbudget_zero_budgets(connection_src).map_err(|e| e.to_string())?;
- let actualbudget_category_transfers_account = get_category_transfers_account(connection_src).map_err(|e| e.to_string())?;
- let actualbudget_transactions = get_all_actualbudget_transactions(connection_src).map_err(|e| e.to_string())?;
+ 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 =
@@ -33,13 +33,13 @@ fn main() -> Result<()> {
&actualbudget_category_transfers_account,
);
- budgeting_app_queries::clear::clear(connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::accounts::insert_accounts(&accounts, connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::categories::insert_categories(&categories, connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::budget_updates::insert_budget_updates(&budget_updates, connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::transactions::insert_transactions(&transactions, connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::transaction_categorisations::insert_transaction_categorisations(&transaction_categorisations, connection_dest).map_err(|e| e.to_string())?;
- budgeting_app_queries::category_transfers::insert_category_transfers(&category_transfers, connection_dest).map_err(|e| e.to_string())?;
+ 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(())
}
diff --git a/backend/importers/actualbudget/src/queries/actualbudget_transactions/get_first_date.rs b/backend/importers/actualbudget/src/queries/actualbudget_transactions/get_first_date.rs
index dabfbd6..b958c37 100644
--- a/backend/importers/actualbudget/src/queries/actualbudget_transactions/get_first_date.rs
+++ b/backend/importers/actualbudget/src/queries/actualbudget_transactions/get_first_date.rs
@@ -1,10 +1,11 @@
+use anyhow::Result;
use crate::{models::actualbudget_date::ActualbudgetDate, schema::transactions::{
self as transactions_schema,
dsl::transactions as transactions_table,
}};
use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SqliteConnection};
-pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate, Error> {
+pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate> {
let date_as_int = transactions_table
.select(min(transactions_schema::date))
.first::<Option<i32>>(connection)
diff --git a/backend/importers/actualbudget/src/transformers.rs b/backend/importers/actualbudget/src/transformers.rs
index 76001d1..dd4d154 100644
--- a/backend/importers/actualbudget/src/transformers.rs
+++ b/backend/importers/actualbudget/src/transformers.rs
@@ -1,20 +1,19 @@
+use anyhow::Result;
use budgeting_app_core::models::{
- account::Account, budget_update::BudgetUpdate, category::Category,
- category_transfer::CategoryTransfer, date_time_utc::DateTimeUtc, transaction::Transaction,
- transaction_categorisation::TransactionCategorisation,
+ account::Account, budget_update::BudgetUpdate, category::Category, category_transfer::CategoryTransfer, date_utc::DateUtc, datetime_utc::DatetimeUtc, transaction::Transaction, transaction_categorisation::TransactionCategorisation
};
use core::panic;
use std::hash::{DefaultHasher, Hash, Hasher};
use crate::models::{actualbudget_account::ActualbudgetAccount, actualbudget_category::ActualbudgetCategory, actualbudget_date::ActualbudgetDate, actualbudget_transaction::ActualbudgetTransaction, actualbudget_zero_budget::ActualbudgetZeroBudget};
-pub fn transform_date(actualbudget_date: &ActualbudgetDate) -> Result<DateTimeUtc, String> {
- DateTimeUtc::from_date_str(&actualbudget_date.to_iso()).map_err(|e| e.to_string())
+pub fn transform_date(actualbudget_date: &ActualbudgetDate) -> Result<DatetimeUtc> {
+ actualbudget_date.to_iso().parse()
}
pub fn transform_accounts(
actualbudget_accounts: &[ActualbudgetAccount],
- first_transaction_date: &DateTimeUtc,
+ first_transaction_date: &DatetimeUtc,
) -> Vec<Account> {
let mut accounts = Vec::<Account>::new();
for account in actualbudget_accounts {
@@ -25,7 +24,7 @@ pub fn transform_accounts(
fn transform_account(
actualbudget_account: &ActualbudgetAccount,
- opening_date: &DateTimeUtc,
+ opening_date: &DatetimeUtc,
) -> Account {
Account {
id: transform_id(&actualbudget_account.id.clone()),
@@ -58,7 +57,7 @@ fn transform_id(actualbudget_id: &str) -> i32 {
pub fn transform_budget_updates(
actualbudget_zero_budgets: &[ActualbudgetZeroBudget],
-) -> Result<Vec<BudgetUpdate>, String> {
+) -> Result<Vec<BudgetUpdate>> {
let mut budget_updates = Vec::<BudgetUpdate>::new();
for zero_budget in actualbudget_zero_budgets {
let first_zero_budget_in_category = get_first_zero_budget_in_category(
@@ -71,7 +70,7 @@ pub fn transform_budget_updates(
budget_updates.push(BudgetUpdate {
id: transform_id(&zero_budget.id.clone()),
category_id: transform_id(&zero_budget.category_id.clone()),
- date: transform_date(&zero_budget.month.clone()).map_err(|e| e.to_string())?,
+ date: DateUtc::from(transform_date(&zero_budget.month.clone())?),
new_budget: zero_budget.amount.try_into().unwrap(),
new_period: 30,
})
@@ -94,7 +93,7 @@ fn get_first_zero_budget_in_category(
pub fn transform_transactions(
actualbudget_transactions: &[ActualbudgetTransaction],
actualbudget_category_transfers_account: &ActualbudgetAccount,
-) -> Result<(Vec<Transaction>, Vec<TransactionCategorisation>), String> {
+) -> Result<(Vec<Transaction>, Vec<TransactionCategorisation>)> {
let mut transactions = Vec::<Transaction>::new();
let mut transaction_categorisations = Vec::<TransactionCategorisation>::new();
@@ -116,7 +115,7 @@ pub fn transform_transactions(
description: atomic_actualbudget_transaction.notes,
payee: atomic_actualbudget_transaction.payee,
quantity: atomic_actualbudget_transaction.amount.try_into().unwrap(),
- date: transform_date(&atomic_actualbudget_transaction.date).map_err(|e| e.to_string())?,
+ date: transform_date(&atomic_actualbudget_transaction.date)?,
account_id: transform_id(&atomic_actualbudget_transaction.account_id),
});
@@ -144,7 +143,7 @@ pub fn transform_transactions(
description: parent_actualbudget_transaction.notes,
payee: parent_actualbudget_transaction.payee,
quantity: parent_actualbudget_transaction.amount.try_into().unwrap(),
- date: transform_date(&parent_actualbudget_transaction.date).map_err(|e| e.to_string())?,
+ date: transform_date(&parent_actualbudget_transaction.date)?,
account_id: transform_id(&parent_actualbudget_transaction.account_id),
});