recoverEvents method

Future<CFResult<EventRecoveryResult>> recoverEvents({
  1. int maxEventsToRetry = 50,
})

Recover failed events and retry offline events

Implementation

Future<CFResult<EventRecoveryResult>> recoverEvents({
  int maxEventsToRetry = 50,
}) async {
  try {
    Logger.i('📧 Starting event recovery process');

    final eventTracker = _getEventTracker();

    // Recover offline events first
    final offlineRecoveryResult =
        await EventRecoveryManager.recoverOfflineEvents(eventTracker);
    final offlineRecovered = offlineRecoveryResult.getOrNull() ?? 0;

    // Then retry failed events
    final failedRetryResult = await EventRecoveryManager.retryFailedEvents(
      eventTracker,
      maxEventsToRetry: maxEventsToRetry,
    );
    final failedRetried = failedRetryResult.getOrNull() ?? 0;

    // Clean up old failed events
    final cleanupResult = await EventRecoveryManager.cleanupOldFailedEvents();
    final cleanedUp = cleanupResult.getOrNull() ?? 0;

    final result = EventRecoveryResult(
      offlineEventsRecovered: offlineRecovered,
      failedEventsRetried: failedRetried,
      oldEventsCleanedUp: cleanedUp,
      timestamp: DateTime.now(),
    );

    Logger.i('📧 Event recovery completed: $result');
    return CFResult.success(result);
  } catch (e) {
    Logger.e('📧 Event recovery failed: $e');
    return CFResult.error(
      'Event recovery failed',
      exception: e is Exception ? e : Exception(e.toString()),
      category: ErrorCategory.analytics,
    );
  }
}