diff --git a/lib/_core/service/transaction_expiry_service.dart b/lib/_core/service/transaction_expiry_service.dart new file mode 100644 index 0000000..c410ab1 --- /dev/null +++ b/lib/_core/service/transaction_expiry_service.dart @@ -0,0 +1,54 @@ +import 'dart:async'; +import 'dart:developer'; +import '../../data/repositories/transaction_repository_impl.dart'; + +class TransactionExpiryService { + static final TransactionExpiryService _instance = TransactionExpiryService._internal(); + late TransactionRepositoryImpl _repository; + Timer? _timer; + bool _isRunning = false; + + factory TransactionExpiryService() => _instance; + + TransactionExpiryService._internal(); + + void initialize(TransactionRepositoryImpl repository) { + _repository = repository; + _startTimer(); + log('[TransactionExpiryService] Service diinisialisasi'); + } + + void _startTimer() { + if (_isRunning) return; + + _timer?.cancel(); + _isRunning = true; + + _timer = Timer.periodic(Duration(days: 1), (_) { + _checkExpiredTransactions(); + }); + + _checkExpiredTransactions(); + + log('[TransactionExpiryService] Timer dimulai, interval: 1 day'); + } + + Future _checkExpiredTransactions() async { + log('[TransactionExpiryService] Memulai pengecekan transaksi kedaluwarsa...'); + try { + await _repository.checkAndCancelExpiredTransactions(); + log('[TransactionExpiryService] Pengecekan transaksi kedaluwarsa selesai'); + } catch (e) { + log('[TransactionExpiryService] Error saat memeriksa transaksi kedaluwarsa: $e'); + } + } + + void dispose() { + _timer?.cancel(); + _timer = null; + _isRunning = false; + log('[TransactionExpiryService] Service dihentikan'); + } + + bool get isRunning => _isRunning; +}