import 'package:drift/drift.dart'; import '../database.dart'; import '../tables.dart'; part 'settings_dao.g.dart'; @DriftAccessor(tables: [AppSettings, PaymentRules]) class SettingsDao extends DatabaseAccessor with _$SettingsDaoMixin { SettingsDao(super.db); Stream watchSettings() { return (select(appSettings)..where((t) => t.id.equals(1))).watchSingle(); } Future getSettings() { return (select(appSettings)..where((t) => t.id.equals(1))).getSingle(); } Future updateSettings(AppSettingsCompanion companion) { return (update(appSettings)..where((t) => t.id.equals(1))).write(companion); } // ── Per-month PaymentRules CRUD ── Stream> watchPaymentRules(int monthPlanId) { return (select(paymentRules) ..where((t) => t.monthPlanId.equals(monthPlanId)) ..orderBy([(t) => OrderingTerm.asc(t.sortOrder)])) .watch(); } Future> getPaymentRules(int monthPlanId) { return (select(paymentRules) ..where((t) => t.monthPlanId.equals(monthPlanId)) ..orderBy([(t) => OrderingTerm.asc(t.sortOrder)])) .get(); } Future addPaymentRule(PaymentRulesCompanion companion) { return into(paymentRules).insert(companion); } Future updatePaymentRule(int id, PaymentRulesCompanion companion) { return (update(paymentRules)..where((t) => t.id.equals(id))).write(companion); } Future deletePaymentRule(int id) { return (delete(paymentRules)..where((t) => t.id.equals(id))).go(); } /// Swap sort orders of two rules (for drag reorder). Future swapRuleOrder(int idA, int orderA, int idB, int orderB) { return transaction(() async { await (update(paymentRules)..where((t) => t.id.equals(idA))) .write(PaymentRulesCompanion(sortOrder: Value(orderB))); await (update(paymentRules)..where((t) => t.id.equals(idB))) .write(PaymentRulesCompanion(sortOrder: Value(orderA))); }); } }