fix: use column default for transaction type
This commit is contained in:
@@ -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'),
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user