fix: use column default for transaction type

This commit is contained in:
2025-05-04 15:55:35 +03:00
parent ca522cde97
commit 305f263735
+16 -14
View File
@@ -26,7 +26,8 @@ class Transactions extends Table {
RealColumn get amount => real()(); // Сумма транзакции
DateTimeColumn get date => dateTime()(); // Дата транзакции
TextColumn get merchant => text().named('merchant_or_source')(); // Название продавца/источника
TextColumn get type => text().named('type')(); // Тип транзакции ('income' или 'expense')
// ИСПРАВЛЕНО: Добавлено .withDefault() для значения по умолчанию
TextColumn get type => text().named('type').withDefault(const Constant('expense'))(); // Тип транзакции ('income' или 'expense')
}
// Класс базы данных
@@ -52,9 +53,10 @@ class AppDatabase extends _$AppDatabase {
onUpgrade: (m, from, to) async {
if (from == 1) {
// Миграция с версии 1 на 2: добавляем колонку type
await m.addColumn(transactions, transactions.type, defaultValue: const Constant('expense'));
// We added the column with a default value, so existing rows are handled.
// No need to manually update existing rows here.
// ИСПРАВЛЕНО: Убран параметр defaultValue. Drift использует .withDefault() из определения колонки.
await m.addColumn(transactions, transactions.type);
// Drift's default migration will add the column and use the
// default value specified in the table definition for existing rows.
}
// Add more migration steps for future versions here
// if (from < 3) { ... }
@@ -181,16 +183,16 @@ class AppDatabase extends _$AppDatabase {
await batch((batch) {
batch.insertAll(transactions, [
// Используем TransactionsCompanion для создания записей для вставки
// Добавляем поле type: 'expense'
TransactionsCompanion.insert(categoryName: 'Groceries', amount: 45.99, date: DateTime.now().subtract(const Duration(days: 1, hours: 2)), merchant: 'Whole Foods Market', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Subscriptions', amount: 39.99, date: DateTime.now().subtract(const Duration(days: 2, hours: 5)), merchant: 'Netflix Premium', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Restaurant', amount: 78.50, date: DateTime.now().subtract(const Duration(days: 2, hours: 19)), merchant: 'Italian Corner', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Shopping', amount: 132.75, date: DateTime.now().subtract(const Duration(days: 3, hours: 11)), merchant: 'Apple Store', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Groceries', amount: 23.45, date: DateTime.now().subtract(const Duration(days: 4, hours: 9)), merchant: 'Local Market', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Transport', amount: 15.00, date: DateTime.now().subtract(const Duration(days: 5, hours: 8)), merchant: 'City Bus', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Restaurant', amount: 56.80, date: DateTime.now().subtract(const Duration(days: 5, hours: 20)), merchant: 'Sushi Express', type: 'expense'),
TransactionsCompanion.insert(categoryName: 'Utilities', amount: 85.20, date: DateTime.now().subtract(const Duration(days: 6, hours: 10)), merchant: 'Electricity Bill', type: 'expense'),
// Пример дохода
// Поле type будет 'expense' по умолчанию из-за .withDefault() в определении колонки
TransactionsCompanion.insert(categoryName: 'Groceries', amount: 45.99, date: DateTime.now().subtract(const Duration(days: 1, hours: 2)), merchant: 'Whole Foods Market'),
TransactionsCompanion.insert(categoryName: 'Subscriptions', amount: 39.99, date: DateTime.now().subtract(const Duration(days: 2, hours: 5)), merchant: 'Netflix Premium'),
TransactionsCompanion.insert(categoryName: 'Restaurant', amount: 78.50, date: DateTime.now().subtract(const Duration(days: 2, hours: 19)), merchant: 'Italian Corner'),
TransactionsCompanion.insert(categoryName: 'Shopping', amount: 132.75, date: DateTime.now().subtract(const Duration(days: 3, hours: 11)), merchant: 'Apple Store'),
TransactionsCompanion.insert(categoryName: 'Groceries', amount: 23.45, date: DateTime.now().subtract(const Duration(days: 4, hours: 9)), merchant: 'Local Market'),
TransactionsCompanion.insert(categoryName: 'Transport', amount: 15.00, date: DateTime.now().subtract(const Duration(days: 5, hours: 8)), merchant: 'City Bus'),
TransactionsCompanion.insert(categoryName: 'Restaurant', amount: 56.80, date: DateTime.now().subtract(const Duration(days: 5, hours: 20)), merchant: 'Sushi Express'),
TransactionsCompanion.insert(categoryName: 'Utilities', amount: 85.20, date: DateTime.now().subtract(const Duration(days: 6, hours: 10)), merchant: 'Electricity Bill'),
// Пример дохода - здесь нужно явно указать type: 'income'
TransactionsCompanion.insert(categoryName: 'Income', amount: 1200.00, date: DateTime.now().subtract(const Duration(days: 7, hours: 9)), merchant: 'Salary', type: 'income'),
]);
});