shared:domain Module Status
Overview
The shared:domain module contains platform-agnostic business logic interfaces, domain models, and pure services.
Current Status (Week 5)
Migrated Components
Week 4
- ✅ DomainCoordinate (data type abstraction)
- Removes Compose UI dependency from domain models
- Uses Float (x/y) for coordinates
Week 5
- ✅ ParticipantProgress (data model)
- Sync metadata (version, updatedAt, isDirty)
- kotlinx.datetime.Instant
- ✅ ProgressTrackingService (service)
- 11 pure functions
- Manual DI pattern
- Zero Android dependencies
Pattern: Manual DI (No Hilt)
All shared:domain services use manual dependency injection:
class ProgressTrackingService(
// Explicit constructor parameters
// No @Inject annotation
) {
// Pure functions
}Rationale:
- Hilt is Android-specific (not KMP-compatible)
- Manual DI is simpler for pure services
- Matches existing RepositoryFactory pattern
Pattern: kotlinx.datetime (No java.time)
All time/date handling uses kotlinx.datetime:
// ✅ KMP-compatible
import kotlinx.datetime.Instant
import kotlinx.datetime.Clock
val timestamp = Clock.System.now()
// ❌ Android-only
import java.time.InstantModule Structure
shared/domain/
├── src/
│ ├── commonMain/kotlin/
│ │ ├── models/ # Data models
│ │ │ └── ParticipantProgress.kt
│ │ └── services/ # Business logic services
│ │ └── ProgressTrackingService.kt
│ └── commonTest/kotlin/ # Platform-agnostic tests
│ └── services/
│ └── ProgressTrackingServiceTest.kt
Dependencies
dependencies {
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.datetime)
// NO Android dependencies
}Testing Strategy
- Platform: commonTest (platform-agnostic)
- Framework: Kotlin Test
- Coverage goal: >80% for all shared:domain code
- Current coverage: 83% (Week 5)
Next Steps (Week 6+)
- Continue migrating pure services
- Apply DomainCoordinate pattern to more models
- Prepare for Week 9 Firebase abstraction
Blockers
- Firebase-dependent services require Week 9 abstraction layer
- DomainCoordinate pattern needs broader application
Last Updated: 2025-10-25 Status: Week 5 complete - First service migrated successfully