import 'package:injectable/injectable.dart'; import 'package:mnemo_cards_backend/api/purchase/payment_manager.dart'; import 'package:mnemo_cards_backend/database/database.dart'; import 'package:mnemo_cards_common/mnemo_cards_common.dart'; import 'task.dart' as task; @LazySingleton() class CheckPaymentTask with task.Task { final PaymentManager _paymentManager; final AppDatabase _db; CheckPaymentTask(this._paymentManager, this._db); Future task() => check(); Future check() async { print('Checking payments...'); // Получаем платежи, которые не обработаны и не 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) { try { // PaymentManager должен работать с Payment (Drift) // TODO: Возможно нужна конвертация в PaymentModel если PaymentManager еще не мигрирован await _paymentManager.checkAndProcessPayment(payment); } catch (e, s) { print(e); print(s); } } } @override String get name => 'check_payment'; @override int get intervalSeconds => 300; }