mnemo_cards/mnemo_cards_backend/lib/cron/check_payment.dart

62 lines
1.9 KiB
Dart
Raw Normal View History

2025-11-16 11:25:27 +00:00
import 'package:injectable/injectable.dart';
import 'package:mnemo_cards_backend/api/purchase/payment_manager.dart';
2025-12-13 14:48:00 +00:00
import 'package:mnemo_cards_backend/database/database.dart';
2025-11-16 11:25:27 +00:00
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
2025-12-13 14:48:00 +00:00
import 'task.dart' as task;
2025-11-16 11:25:27 +00:00
@LazySingleton()
2025-12-13 14:48:00 +00:00
class CheckPaymentTask with task.Task {
2025-11-16 11:25:27 +00:00
final PaymentManager _paymentManager;
2025-12-13 14:48:00 +00:00
final AppDatabase _db;
2025-11-16 11:25:27 +00:00
CheckPaymentTask(
this._paymentManager,
2025-12-13 14:48:00 +00:00
this._db,
2025-11-16 11:25:27 +00:00
);
Future<void> task() => check();
Future<void> check() async {
print('Checking payments...');
2025-12-13 14:48:00 +00:00
// Получаем платежи, которые не обработаны и не unknown
final allPayments = await _db.paymentDao.getAllPayments();
final unprocessedPayments = allPayments.where((payment) {
final status = PaymentStatus.values.firstWhere(
(s) => s.name == payment.status,
orElse: () => PaymentStatus.unknown,
);
if (status == PaymentStatus.processed || status == PaymentStatus.unknown) {
return false;
}
final system = PaymentSystem.values.firstWhere(
(s) => s.name == payment.paymentSystem,
orElse: () => PaymentSystem.yookassa,
);
return system == PaymentSystem.yookassa || system == PaymentSystem.rustore;
}).toList();
print('Found ${unprocessedPayments.length} unprocessed payments');
for (final payment in unprocessedPayments) {
2025-11-16 11:25:27 +00:00
try {
2025-12-13 14:48:00 +00:00
// PaymentManager должен работать с Payment (Drift)
// TODO: Возможно нужна конвертация в PaymentModel если PaymentManager еще не мигрирован
await _paymentManager.checkAndProcessPayment(payment);
2025-11-16 11:25:27 +00:00
} catch (e, s) {
print(e);
print(s);
}
}
}
@override
String get name => 'check_payment';
@override
int get intervalSeconds => 300;
}