HybridTournamentRepository API Reference

Offline-first tournament repository with automatic cloud synchronization.


Overview

File: data/repository/impl/HybridTournamentRepository.kt Lines: 1,506 lines Status: ✅ Production

Purpose

Implements offline-first architecture for tournament data:

  • Local-first data access
  • Automatic background sync
  • Network connectivity monitoring
  • Smart caching with TTL
  • Conflict resolution

Offline-First Pattern

override suspend fun getTournament(id: Long): Result<Tournament> {
    // 1. Return local data immediately
    val local = offlineRepo.getTournament(id).getOrNull()
 
    // 2. Sync with remote in background
    if (networkMonitor.isConnected) {
        viewModelScope.launch {
            val remote = firebaseRepo.getTournament(id).getOrNull()
            if (remote != null) {
                offlineRepo.updateTournament(remote)
            }
        }
    }
 
    return Result.success(local)
}

Cache Strategy

Tournament StatusTTLRationale
COMPLETEDIndefiniteImmutable data
IN_PROGRESS5 minutesBalance freshness vs reads
PLANNED10 minutesRarely changes

Performance: 50-90% reduction in Firebase reads, 5-10x faster load times


Key Features

// Smart sync
fun enableAutoSync()
fun disableAutoSync()
fun forceSyncNow()
 
// Network monitoring
fun observeNetworkStatus(): Flow<NetworkStatus>
 
// Cache management
fun clearCache()
fun invalidateCache(tournamentId: Long)

Usage Example

@Composable
fun TournamentScreen(
    tournamentId: Long,
    repository: HybridTournamentRepository
) {
    // Data loads from local cache immediately
    val tournament by repository
        .observeTournament(tournamentId)
        .collectAsState(initial = null)
 
    // Network status indicator
    val networkStatus by repository
        .observeNetworkStatus()
        .collectAsState(initial = NetworkStatus.UNKNOWN)
 
    tournament?.let { data ->
        TournamentContent(data)
    }
 
    if (networkStatus == NetworkStatus.OFFLINE) {
        OfflineBanner()
    }
}


Status: ✅ Production Lines: 1,506 (god class - consider refactoring) Last Updated: 2025-11-01