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;
|
|
|
|
|
|
}
|