import 'package:injectable/injectable.dart'; import 'package:isar/isar.dart'; import 'package:mnemo_cards_backend/api/purchase/payment_manager.dart'; import 'package:mnemo_cards_backend/cron/task.dart'; import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart'; import 'package:mnemo_cards_common/mnemo_cards_common.dart'; import '../main.dart'; @LazySingleton() class CheckPaymentTask with Task { final PaymentManager _paymentManager; CheckPaymentTask( this._paymentManager, ); Future task() => check(); Future check() async { print('Checking payments...'); final models = await isar.txn( () async => await isar.paymentModels .filter() .not() .statusEqualTo(PaymentStatus.processed) .and() .not() .statusEqualTo(PaymentStatus.unknown) .and() .group( (q) => q .paymentSystemEqualTo(PaymentSystem.yookassa) .or() .paymentSystemEqualTo(PaymentSystem.rustore), ) .findAll(), ); print('Found ${models.length} unprocessed payments'); for (final model in models) { try { await _paymentManager.checkAndProcessPayment(model); } catch (e, s) { print(e); print(s); } } } @override String get name => 'check_payment'; @override int get intervalSeconds => 300; }