use crate::models::actualbudget::{ account::Account, category::Category, date::Date, transaction::Transaction, zero_budget::ZeroBudget, }; use sqlite::Connection; pub fn get_first_transaction_date(connection: &Connection) -> Date { let mut statement = connection .prepare("select min(date) as min_date from transactions;") .unwrap(); match statement.next() { Ok(sqlite::State::Row) => Date::from_date_row(&statement, "min_date"), err => panic!("Could not find first transaction date: {:?}", err), } } pub fn get_accounts(connection: &Connection) -> Vec { let mut statement = connection.prepare("select * from accounts;").unwrap(); let mut accounts = Vec::::new(); while let Ok(sqlite::State::Row) = statement.next() { accounts.push(Account::from_row(&statement)); } accounts } pub fn get_categories(connection: &Connection) -> Vec { let mut statement = connection.prepare("select * from categories;").unwrap(); let mut categories = Vec::::new(); while let Ok(sqlite::State::Row) = statement.next() { categories.push(Category::from_row(&statement)); } categories } pub fn get_zero_budgets(connection: &Connection) -> Vec { let mut statement = connection.prepare("select * from zero_budgets;").unwrap(); let mut zero_budgets = Vec::::new(); while let Ok(sqlite::State::Row) = statement.next() { zero_budgets.push(ZeroBudget::from_row(&statement)); } zero_budgets } pub fn get_category_transfers_account(connection: &Connection) -> Account { let mut statement = connection .prepare("select * from accounts where name = 'Category transfers';") .unwrap(); match statement.next() { Ok(sqlite::State::Row) => Account::from_row(&statement), _ => panic!("Could not determine category transfers account"), } } pub fn get_transactions(connection: &Connection) -> Vec { let mut statement = connection.prepare("select * from transactions;").unwrap(); let mut transactions = Vec::::new(); while let Ok(sqlite::State::Row) = statement.next() { transactions.push(Transaction::from_row(&statement)); } transactions }