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 …