diff --git a/lib/database/sqlite.dart b/lib/database/sqlite.dart index 425509e..04a4567 100644 --- a/lib/database/sqlite.dart +++ b/lib/database/sqlite.dart @@ -179,7 +179,16 @@ class OkaneDatabase extends _$OkaneDatabase { } } -@DriftAccessor(tables: [Accounts]) +@DriftAccessor( + tables: [ + Accounts, + Transactions, + TransactionTemplates, + RecurringTransactions, + Budgets, + Beneficiaries, + ], +) class AccountsDao extends DatabaseAccessor with _$AccountsDaoMixin { AccountsDao(OkaneDatabase db) : super(db); @@ -195,6 +204,22 @@ class AccountsDao extends DatabaseAccessor Future upsertAccount(AccountsCompanion account) { return into(accounts).insertOnConflictUpdate(account); } + + Future removeAccount(Account account) async { + // Delete dependent data + await (delete(transactions) + ..where((t) => t.accountId.equals(account.id))).go(); + await (delete(recurringTransactions) + ..where((r) => r.accountId.equals(account.id))).go(); + await (delete(transactionTemplates) + ..where((t) => t.accountId.equals(account.id))).go(); + await (delete(budgets)..where((b) => b.accountId.equals(account.id))).go(); + await (delete(beneficiaries) + ..where((b) => b.accountId.equals(account.id))).go(); + + // Delete the account + await (delete(accounts)..where((a) => a.id.equals(account.id))).go(); + } } enum TransactionQueryDateOption { thisMonth } diff --git a/lib/database/sqlite.g.dart b/lib/database/sqlite.g.dart index db8ec36..fc43ca4 100644 --- a/lib/database/sqlite.g.dart +++ b/lib/database/sqlite.g.dart @@ -8190,6 +8190,15 @@ class $OkaneDatabaseManager { mixin _$AccountsDaoMixin on DatabaseAccessor { $AccountsTable get accounts => attachedDatabase.accounts; + $ExpenseCategoriesTable get expenseCategories => + attachedDatabase.expenseCategories; + $BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries; + $TransactionsTable get transactions => attachedDatabase.transactions; + $TransactionTemplatesTable get transactionTemplates => + attachedDatabase.transactionTemplates; + $RecurringTransactionsTable get recurringTransactions => + attachedDatabase.recurringTransactions; + $BudgetsTable get budgets => attachedDatabase.budgets; } mixin _$BeneficiariesDaoMixin on DatabaseAccessor { $AccountsTable get accounts => attachedDatabase.accounts; diff --git a/lib/ui/state/core.dart b/lib/ui/state/core.dart index eff8457..9dc16a8 100644 --- a/lib/ui/state/core.dart +++ b/lib/ui/state/core.dart @@ -193,8 +193,7 @@ class CoreCubit extends Cubit { cancelStreams(); try { - // TODO - //await db.deleteAccount(account); + await GetIt.I.get().accountsDao.removeAccount(account); } finally { emit(state.copyWith(isDeletingAccount: false)); }