Skip to content

Commit

Permalink
Improve api of MeasurementValueMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
Faltenreich committed Feb 20, 2024
1 parent 7476996 commit aa0a375
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.faltenreich.diaguard.dashboard.DashboardViewState
import com.faltenreich.diaguard.measurement.property.MeasurementPropertyRepository
import com.faltenreich.diaguard.measurement.type.MeasurementType
import com.faltenreich.diaguard.measurement.type.MeasurementTypeRepository
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueForDatabase
import com.faltenreich.diaguard.measurement.value.MeasurementValueMapper
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import com.faltenreich.diaguard.shared.datetime.DateUnit
import com.faltenreich.diaguard.shared.datetime.GetTodayUseCase
Expand All @@ -17,7 +17,7 @@ class GetAverageUseCase(
private val measurementPropertyRepository: MeasurementPropertyRepository = inject(),
private val measurementTypeRepository: MeasurementTypeRepository = inject(),
private val measurementValueRepository: MeasurementValueRepository = inject(),
private val measurementValueConverter: MeasurementValueConverter = inject(),
private val mapMeasurementValue: MeasurementValueMapper = inject(),
private val getToday: GetTodayUseCase = inject(),
) {

Expand Down Expand Up @@ -49,13 +49,13 @@ class GetAverageUseCase(
val unit = types.first().selectedUnit
DashboardViewState.Revisit.Average(
day = averageOfDay?.let {
measurementValueConverter.convertToCustom(MeasurementValueForDatabase(averageOfDay, unit))
mapMeasurementValue(MeasurementValueForDatabase(averageOfDay, unit))
}?.value,
week = averageOfWeek?.let {
measurementValueConverter.convertToCustom(MeasurementValueForDatabase(averageOfWeek, unit))
mapMeasurementValue(MeasurementValueForDatabase(averageOfWeek, unit))
}?.value,
month = averageOfMonth?.let {
measurementValueConverter.convertToCustom(MeasurementValueForDatabase(averageOfMonth, unit))
mapMeasurementValue(MeasurementValueForDatabase(averageOfMonth, unit))
}?.value,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.faltenreich.diaguard.dashboard.usecase

import com.faltenreich.diaguard.dashboard.DashboardViewState
import com.faltenreich.diaguard.measurement.property.MeasurementPropertyRepository
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueMapper
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import com.faltenreich.diaguard.shared.datetime.DateTimeFactory
import com.faltenreich.diaguard.shared.datetime.DateTimeFormatter
Expand All @@ -13,7 +13,7 @@ import kotlinx.coroutines.flow.map
class GetLatestBloodSugarUseCase(
private val measurementPropertyRepository: MeasurementPropertyRepository = inject(),
private val measurementValueRepository: MeasurementValueRepository,
private val measurementValueConverter: MeasurementValueConverter,
private val measurementValueMapper: MeasurementValueMapper,
private val dateTimeFactory: DateTimeFactory,
private val dateTimeFormatter: DateTimeFormatter,
) {
Expand All @@ -25,7 +25,7 @@ class GetLatestBloodSugarUseCase(
null -> null
else -> DashboardViewState.Revisit.LatestBloodSugar(
entry = value.entry,
value = measurementValueConverter.convertToCustom(value).value,
value = measurementValueMapper(value).value,
timePassed = dateTimeFormatter.formatTimePassed(
start = value.entry.dateTime,
end = dateTimeFactory.now(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@ package com.faltenreich.diaguard.entry.form.validation

import com.faltenreich.diaguard.MR
import com.faltenreich.diaguard.entry.form.measurement.MeasurementTypeInputState
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueForUser
import com.faltenreich.diaguard.measurement.value.MeasurementValueMapper
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.localization.Localization
import com.faltenreich.diaguard.shared.primitive.NumberFormatter
import com.faltenreich.diaguard.shared.validation.ValidationResult
import com.faltenreich.diaguard.shared.validation.ValidationRule

class RealisticMeasurementValueRule(
private val measurementValueConverter: MeasurementValueConverter = inject(),
private val numberFormatter: NumberFormatter = inject(),
private val mapValue: MeasurementValueMapper = inject(),
private val formatNumber: NumberFormatter = inject(),
private val localization: Localization = inject(),
) : ValidationRule<MeasurementTypeInputState> {

override fun check(input: MeasurementTypeInputState): ValidationResult<MeasurementTypeInputState> {
val valueForUser = MeasurementValueForUser(input.input, input.type.selectedUnit)
val valueForDatabase = measurementValueConverter.convertToDefault(valueForUser)
val valueForDatabase = mapValue(valueForUser)
val (minimumValue, maximumValue) = input.type.minimumValue to input.type.maximumValue
return when (valueForDatabase?.value) {
null -> ValidationResult.Success(input)
Expand All @@ -27,8 +27,8 @@ class RealisticMeasurementValueRule(
input,
error = localization.getString(
MR.strings.entry_form_error_unrealistic_value,
numberFormatter.invoke(minimumValue),
numberFormatter.invoke(maximumValue),
formatNumber(minimumValue),
formatNumber(maximumValue),
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ fun FoodListItem(
food: Food?,
modifier: Modifier = Modifier,
// TODO: Extract into use case
numberFormatter: NumberFormatter = inject(),
formatNumber: NumberFormatter = inject(),
) {
Row(
modifier = modifier
Expand All @@ -39,7 +39,7 @@ fun FoodListItem(
}
Skeleton(item = food) { food ->
Text(
text = numberFormatter.invoke(food.carbohydrates),
text = formatNumber(food.carbohydrates),
style = AppTheme.typography.bodyMedium,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ import com.faltenreich.diaguard.measurement.type.list.MeasurementTypeListViewMod
import com.faltenreich.diaguard.measurement.unit.MeasurementUnitRepository
import com.faltenreich.diaguard.measurement.unit.list.MeasurementUnitListViewModel
import com.faltenreich.diaguard.measurement.value.CreateMeasurementValuesUseCase
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueMapper
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module

fun measurementModule() = module {
singleOf(::MeasurementValueConverter)
singleOf(::MeasurementValueMapper)

singleOf(::MeasurementPropertyRepository)
singleOf(::MeasurementTypeRepository)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,27 @@ package com.faltenreich.diaguard.measurement.value

import com.faltenreich.diaguard.shared.primitive.NumberFormatter

class MeasurementValueConverter(
private val numberFormatter: NumberFormatter,
class MeasurementValueMapper(
private val formatNumber: NumberFormatter,
) {

fun convertToCustom(value: MeasurementValue): MeasurementValueForUser {
operator fun invoke(value: MeasurementValue): MeasurementValueForUser {
val unit = value.type.selectedUnit
return MeasurementValueForUser(
value = numberFormatter(value.value * unit.factor),
value = formatNumber(value.value * unit.factor),
unit = unit,
)
}

fun convertToCustom(value: MeasurementValueForDatabase): MeasurementValueForUser {
operator fun invoke(value: MeasurementValueForDatabase): MeasurementValueForUser {
val unit = value.unit
return MeasurementValueForUser(
value = numberFormatter(value.value * unit.factor),
value = formatNumber(value.value * unit.factor),
unit = unit,
)
}

fun convertToDefault(value: MeasurementValueForUser): MeasurementValueForDatabase? {
operator fun invoke(value: MeasurementValueForUser): MeasurementValueForDatabase? {
val number = value.value.toDoubleOrNull() ?: return null
val unit = value.unit
return MeasurementValueForDatabase(value = number / unit.factor, unit = unit)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import com.faltenreich.diaguard.shared.primitive.format
class GetAverageUseCase(
private val typeRepository: MeasurementTypeRepository,
private val valueRepository: MeasurementValueRepository,
private val numberFormatter: NumberFormatter,
private val formatNumber: NumberFormatter,
) {

operator fun invoke(
Expand All @@ -25,7 +25,7 @@ class GetAverageUseCase(
dateRange.endInclusive.atEndOfDay(),
)?.let { average ->
"%s %s".format(
numberFormatter.invoke(average),
formatNumber(average),
type.selectedUnit.abbreviation,
)
}
Expand Down

0 comments on commit aa0a375

Please sign in to comment.