Skip to content

feat: WorkManager - periodic background product sync with constraints - #14

Merged
Prajwal-4121998 merged 1 commit into
developfrom
feature/workmanager-background-sync
Aug 9, 2026
Merged

Prajwal-4121998 merged 1 commit into
developfrom
feature/workmanager-background-sync

Conversation

@Prajwal-4121998

Copy link
Copy Markdown
Owner
  • Added syncProducts() to ProductRepository interface, returns domain-owned SyncResult
  • SyncResult/SyncError: sealed domain types, zero framework deps, replace exception-based failure signaling across the repository boundary
  • ProductRepositoryImpl: sole translation boundary, catches real exceptions, maps to SyncError, never throws outward for expected failure cases
  • ProductSyncWorker: @HiltWorker CoroutineWorker kept as thin glue only
  • SyncResultMapper: pure function extracted for retry/fail decision logic, unit tested independently of WorkManager/Android runtime
  • SyncScheduler: encapsulates WorkManager scheduling, UNMETERED (Wi-Fi only) + battery-not-low constraints, 6-hour interval, exponential backoff (15min base), ExistingPeriodicWorkPolicy.KEEP prevents timer reset on repeated schedule calls
  • WorkManagerModule: @provides WorkManager singleton via Hilt
  • CatalogApplication: implements Configuration.Provider with HiltWorkerFactory, removed default WorkManagerInitializer (required for Hilt worker injection to take effect), schedules sync in onCreate()
  • Tests: SyncResultMapperTest covers all retry/fail branches including runAttemptCount boundary; ProductRepositoryImplTest covers syncProducts success and NoInternet error paths

- Added syncProducts() to ProductRepository interface, returns domain-owned SyncResult
- SyncResult/SyncError: sealed domain types, zero framework deps, replace exception-based
  failure signaling across the repository boundary
- ProductRepositoryImpl: sole translation boundary, catches real exceptions, maps to
  SyncError, never throws outward for expected failure cases
- ProductSyncWorker: @HiltWorker CoroutineWorker kept as thin glue only
- SyncResultMapper: pure function extracted for retry/fail decision logic,
  unit tested independently of WorkManager/Android runtime
- SyncScheduler: encapsulates WorkManager scheduling, UNMETERED (Wi-Fi only) +
  battery-not-low constraints, 6-hour interval, exponential backoff (15min base),
  ExistingPeriodicWorkPolicy.KEEP prevents timer reset on repeated schedule calls
- WorkManagerModule: @provides WorkManager singleton via Hilt
- CatalogApplication: implements Configuration.Provider with HiltWorkerFactory,
  removed default WorkManagerInitializer (required for Hilt worker injection to
  take effect), schedules sync in onCreate()
- Tests: SyncResultMapperTest covers all retry/fail branches including
  runAttemptCount boundary; ProductRepositoryImplTest covers syncProducts
  success and NoInternet error paths
@Prajwal-4121998
Prajwal-4121998 merged commit 5162707 into develop Aug 9, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant