fixes
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions

This commit is contained in:
Dmitry 2026-01-07 00:26:13 +03:00
parent f36b440bff
commit 496aac9135

View file

@ -58,39 +58,40 @@ class PaymentDao extends DatabaseAccessor<AppDatabase>
final inserted = await into(payments).insertReturning(payment); final inserted = await into(payments).insertReturning(payment);
print('✅ PaymentDao.createPayment: Payment inserted, date=${inserted.date.dateTime}'); print('✅ PaymentDao.createPayment: Payment inserted, date=${inserted.date.dateTime}');
// Query back to get the id since Payment class doesn't have id field // Try to get id from inserted object first
// (database needs to be regenerated to include id in Payment class) if (inserted.id.isNotEmpty) {
print('✅ PaymentDao.createPayment: Got id from inserted object, id=${inserted.id}');
return inserted.id;
}
// Query back to get the id using type-safe queries
// Use externalToken if available, otherwise query by unique fields // Use externalToken if available, otherwise query by unique fields
if (inserted.externalToken != null && inserted.externalToken!.isNotEmpty) { if (inserted.externalToken != null && inserted.externalToken!.isNotEmpty) {
print('🔍 PaymentDao.createPayment: Querying by externalToken=${inserted.externalToken}'); print('🔍 PaymentDao.createPayment: Querying by externalToken=${inserted.externalToken}');
print('🔍 PaymentDao.createPayment: SQL: SELECT id FROM payments WHERE external_token = ? LIMIT 1'); final foundPayment = await getPaymentByExternalToken(inserted.externalToken!);
final results = await (customSelect( if (foundPayment != null && foundPayment.id.isNotEmpty) {
'SELECT id FROM payments WHERE external_token = ? LIMIT 1', print('✅ PaymentDao.createPayment: Found payment by externalToken, id=${foundPayment.id}');
variables: [Variable.withString(inserted.externalToken!)], return foundPayment.id;
readsFrom: {payments},
).map((row) => row.read<String>('id')).get());
if (results.isNotEmpty) {
print('✅ PaymentDao.createPayment: Found payment by externalToken, id=${results.first}');
return results.first;
} }
print('⚠️ PaymentDao.createPayment: No payment found by externalToken'); print('⚠️ PaymentDao.createPayment: No payment found by externalToken');
} }
// Fallback: query by userId, date, and amount
// Fallback: query by userId, date, and amount using type-safe queries
print('🔍 PaymentDao.createPayment: Querying by userId, date, amount (fallback)'); print('🔍 PaymentDao.createPayment: Querying by userId, date, amount (fallback)');
print('🔍 PaymentDao.createPayment: SQL: SELECT id FROM payments WHERE user_id = ? AND date = ? AND amount = ? ORDER BY created_at DESC LIMIT 1'); final query = select(payments)
final results = await (customSelect( ..where((p) =>
'SELECT id FROM payments WHERE user_id = ? AND date = ? AND amount = ? ORDER BY created_at DESC LIMIT 1', p.userId.equals(payment.userId.value) &
variables: [ p.date.equals(inserted.date) &
Variable.withString(payment.userId.value), p.amount.equals(inserted.amount))
Variable.withDateTime(inserted.date.dateTime), ..orderBy([(p) => OrderingTerm.desc(p.createdAt)])
Variable.withString(inserted.amount), ..limit(1);
],
readsFrom: {payments}, final results = await query.get();
).map((row) => row.read<String>('id')).get()); if (results.isNotEmpty && results.first.id.isNotEmpty) {
if (results.isNotEmpty) { print('✅ PaymentDao.createPayment: Found payment by fallback query, id=${results.first.id}');
print('✅ PaymentDao.createPayment: Found payment by fallback query, id=${results.first}'); return results.first.id;
return results.first;
} }
print('❌ PaymentDao.createPayment: Failed to retrieve payment ID after creation'); print('❌ PaymentDao.createPayment: Failed to retrieve payment ID after creation');
throw Exception('Failed to retrieve payment ID after creation'); throw Exception('Failed to retrieve payment ID after creation');
} }