Skip to content

Commit

Permalink
Extract NumberFormatter from MeasurementValueConverter
Browse files Browse the repository at this point in the history
  • Loading branch information
Faltenreich committed Feb 20, 2024
1 parent 4a89237 commit 23fd2a8
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@ 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.MeasurementValueFormatter
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import com.faltenreich.diaguard.shared.datetime.DateUnit
import com.faltenreich.diaguard.shared.datetime.GetTodayUseCase
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.primitive.NumberFormatter
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine

class GetAverageUseCase(
private val measurementPropertyRepository: MeasurementPropertyRepository = inject(),
private val measurementTypeRepository: MeasurementTypeRepository = inject(),
private val measurementValueRepository: MeasurementValueRepository = inject(),
private val measurementValueFormatter: MeasurementValueFormatter = inject(),
private val measurementValueConverter: MeasurementValueConverter = inject(),
private val numberFormatter: NumberFormatter = inject(),
private val getToday: GetTodayUseCase = inject(),
) {

Expand Down Expand Up @@ -48,23 +50,23 @@ class GetAverageUseCase(
val factor = types.first().selectedUnit.factor
DashboardViewState.Revisit.Average(
day = averageOfDay?.let {
measurementValueFormatter.formatValue(
measurementValueConverter.convertToCustom(
value = averageOfDay,
factor = factor,
)
},
}?.let(numberFormatter::format),
week = averageOfWeek?.let {
measurementValueFormatter.formatValue(
measurementValueConverter.convertToCustom(
value = averageOfWeek,
factor = factor,
)
},
}?.let(numberFormatter::format),
month = averageOfMonth?.let {
measurementValueFormatter.formatValue(
measurementValueConverter.convertToCustom(
value = averageOfMonth,
factor = factor,
)
},
}?.let(numberFormatter::format),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@ 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.MeasurementValueFormatter
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import com.faltenreich.diaguard.shared.datetime.DateTimeFactory
import com.faltenreich.diaguard.shared.datetime.DateTimeFormatter
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.primitive.NumberFormatter
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

class GetLatestBloodSugarUseCase(
private val measurementPropertyRepository: MeasurementPropertyRepository = inject(),
private val measurementValueRepository: MeasurementValueRepository,
private val valueFormatter: MeasurementValueFormatter,
private val measurementValueConverter: MeasurementValueConverter,
private val numberFormatter: NumberFormatter = inject(),
private val dateTimeFactory: DateTimeFactory,
private val dateTimeFormatter: DateTimeFormatter,
) {
Expand All @@ -25,7 +27,7 @@ class GetLatestBloodSugarUseCase(
null -> null
else -> DashboardViewState.Revisit.LatestBloodSugar(
entry = value.entry,
value = valueFormatter.formatValue(value),
value = measurementValueConverter.convertToCustom(value).let(numberFormatter::format),
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,20 +2,22 @@ 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.MeasurementValueFormatter
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
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 measurementValueFormatter: MeasurementValueFormatter = inject(),
private val measurementValueConverter: MeasurementValueConverter = inject(),
private val numberFormatter: NumberFormatter = inject(),
private val localization: Localization = inject(),
) : ValidationRule<MeasurementTypeInputState> {

override fun check(input: MeasurementTypeInputState): ValidationResult<MeasurementTypeInputState> {
val value = input.input.toDoubleOrNull()?.let { value ->
measurementValueFormatter.convertToDefault(value, input.type)
measurementValueConverter.convertToDefault(value, input.type)
}
val (minimumValue, maximumValue) = input.type.minimumValue to input.type.maximumValue
return when (value) {
Expand All @@ -25,8 +27,8 @@ class RealisticMeasurementValueRule(
input,
error = localization.getString(
MR.strings.entry_form_error_unrealistic_value,
measurementValueFormatter.formatValue(minimumValue),
measurementValueFormatter.formatValue(maximumValue),
numberFormatter.format(minimumValue),
numberFormatter.format(maximumValue),
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.faltenreich.diaguard.AppTheme
import com.faltenreich.diaguard.food.Food
import com.faltenreich.diaguard.measurement.value.MeasurementValueFormatter
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.shared.primitive.NumberFormatter
import com.faltenreich.diaguard.shared.view.Skeleton

@Composable
fun FoodListItem(
food: Food?,
modifier: Modifier = Modifier,
valueFormatter: MeasurementValueFormatter = inject(),
// TODO: Extract into use case
numberFormatter: NumberFormatter = inject(),
) {
Row(
modifier = modifier
Expand All @@ -38,7 +39,7 @@ fun FoodListItem(
}
Skeleton(item = food) { food ->
Text(
text = valueFormatter.formatValue(food.carbohydrates, factor = 1.0),
text = numberFormatter.format(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.MeasurementValueFormatter
import com.faltenreich.diaguard.measurement.value.MeasurementValueConverter
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module

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

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

import com.faltenreich.diaguard.measurement.type.MeasurementType

class MeasurementValueConverter {

fun convertToCustom(value: Double, factor: Double): Double {
return value * factor
}

fun convertToCustom(value: MeasurementValue): Double {
return convertToCustom(value = value.value, factor = value.type.selectedUnit.factor)
}

fun convertToCustom(value: Double, type: MeasurementType): Double {
return convertToCustom(value = value, factor = type.selectedUnit.factor)
}

fun convertToDefault(value: Double, type: MeasurementType): Double {
return value / type.selectedUnit.factor
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ package com.faltenreich.diaguard.statistic

import com.faltenreich.diaguard.measurement.property.MeasurementProperty
import com.faltenreich.diaguard.measurement.type.MeasurementTypeRepository
import com.faltenreich.diaguard.measurement.value.MeasurementValueFormatter
import com.faltenreich.diaguard.measurement.value.MeasurementValueRepository
import com.faltenreich.diaguard.shared.datetime.Date
import com.faltenreich.diaguard.shared.primitive.NumberFormatter
import com.faltenreich.diaguard.shared.primitive.format

class GetAverageUseCase(
private val typeRepository: MeasurementTypeRepository,
private val valueRepository: MeasurementValueRepository,
private val valueFormatter: MeasurementValueFormatter,
private val numberFormatter: NumberFormatter,
) {

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

0 comments on commit 23fd2a8

Please sign in to comment.