Logo Lanfrica

JobGetabu/surveyResponseSyncEngine

Domaine:

agriculture

Type de record:

software
Créateur:
Job
Hôte:
Survey Response Sync Engine for field agents collecting agricultural data in rural Sub-Saharan Africa. # Survey Response Sync Engine — Pula Advisors Assignment ## Overview This project implements a **Survey Response Sync Engine** for field agents collecting agricultural data in rural Sub-Saharan Africa. The engine handles offline storage, upload queuing, partial failure recovery, and intelligent retry behavior — without requiring any network connectivity at collection time. **Target**: Android (primary) · iOS optional bonus **Architecture**: Clean Architecture · Kotlin Multiplatform **Module**: `:composeApp` (single-module KMP) --- ## Architecture Overview: Architecture docs: ``` commonMain (shared) ├── domain/ ├── data/remote/ Mock API └── data/sync/ Sync engine androidMain (Android-specific) ├── data/local/ Room database, DAOs, entities, TypeConverters └── data/repository/ Repository -> domain → Room commonTest └── All unit tests Fake repositories androidTest └── DAO tests In-memory Room ``` Clean Architecture rule: inner layers (domain) have zero knowledge of outer layers (Room, Android). ## Domain Model Design. ### Survey Response Structure ``` - SurveyResponse - SurveyAnswer - RepeatingSection (handles "farmer has N farms") - MediaAttachment - SyncStatus ``` ## Tests | Location | File | Tests | |---|---|---| | commonTest | `SyncEngineAllSucceedTest` | 2 | | commonTest | `SyncEnginePartialFailureTest` | 4 | | commonTest | `SyncEngineNetworkDegradationTest` | 3 | | commonTest | `SyncEngineEmptyQueueTest` | 2 | | commonTest | `SyncEngineConcurrentSyncTest` | 2 | | commonTest | `NetworkErrorClassifierTest` | 8 | | commonTest | `SaveSurveyResponseUseCaseTest` | 2 | | commonTest | `PurgeOldSyncedResponsesUseCaseTest` | 1 | --- This is a Kotlin Multiplatform project targeting Android, iOS. * /composeApp is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders: - commonMain is for code that’s common for all targets. - Other folders are for Kotlin code that …