import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; import 'time_frame_enum.dart'; part 'drift_database.g.dart'; class Accounts extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text().withDefault(const Constant(''))(); } class Transactions extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text().withDefault(const Constant(''))(); DateTimeColumn get date => dateTime().nullable()(); RealColumn get amount => real().withDefault(const Constant(0.0))(); IntColumn get accountId => integer().references(Accounts, #id)(); IntColumn get recurringTransactionId => integer().nullable().references(RecurringTransactions, #id)(); } class RecurringTransactions extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text().withDefault(const Constant(''))(); DateTimeColumn get startDate => dateTime().nullable()(); IntColumn get timeFrame => intEnum()(); RealColumn get amount => real().withDefault(const Constant(0.0))(); IntColumn get accountId => integer().references(Accounts, #id)(); } @DriftDatabase(tables: [Accounts, Transactions, RecurringTransactions]) class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @override int get schemaVersion => 1; static QueryExecutor _openConnection() { return driftDatabase( name: 'dragon_ledger', web: DriftWebOptions( sqlite3Wasm: Uri.parse('sqlite3.wasm'), driftWorker: Uri.parse('drift_worker.js'), ), ); } }