diff --git a/boot/src/main/kotlin/org/freekode/tp2intervals/domain/workout/structure/WorkoutStructure.kt b/boot/src/main/kotlin/org/freekode/tp2intervals/domain/workout/structure/WorkoutStructure.kt index c443f183..162dda29 100644 --- a/boot/src/main/kotlin/org/freekode/tp2intervals/domain/workout/structure/WorkoutStructure.kt +++ b/boot/src/main/kotlin/org/freekode/tp2intervals/domain/workout/structure/WorkoutStructure.kt @@ -19,5 +19,6 @@ data class WorkoutStructure( FTP_PERCENTAGE, LTHR_PERCENTAGE, PACE_PERCENTAGE, + RELATIVE_PERCEIVED_EFFORT, } } diff --git a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/IntervalsWorkoutDocDTO.kt b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/IntervalsWorkoutDocDTO.kt index 19f265af..5a1de149 100644 --- a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/IntervalsWorkoutDocDTO.kt +++ b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/IntervalsWorkoutDocDTO.kt @@ -17,6 +17,7 @@ class IntervalsWorkoutDocDTO( "POWER" to WorkoutStructure.TargetUnit.FTP_PERCENTAGE, "HR" to WorkoutStructure.TargetUnit.LTHR_PERCENTAGE, "PACE" to WorkoutStructure.TargetUnit.PACE_PERCENTAGE, + "RPE" to WorkoutStructure.TargetUnit.RELATIVE_PERCEIVED_EFFORT, ) fun mapTarget(): WorkoutStructure.TargetUnit { diff --git a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/ToIntervalsStructureConverter.kt b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/ToIntervalsStructureConverter.kt index 56d65033..01ab5a65 100644 --- a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/ToIntervalsStructureConverter.kt +++ b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/intervalsicu/workout/ToIntervalsStructureConverter.kt @@ -11,6 +11,7 @@ class ToIntervalsStructureConverter( WorkoutStructure.TargetUnit.FTP_PERCENTAGE to "%", WorkoutStructure.TargetUnit.LTHR_PERCENTAGE to "% LTHR", WorkoutStructure.TargetUnit.PACE_PERCENTAGE to "% Pace", + WorkoutStructure.TargetUnit.RELATIVE_PERCEIVED_EFFORT to "", ) fun toIntervalsStructureStr(): String { @@ -31,14 +32,10 @@ class ToIntervalsStructureConverter( } private fun getStepString(workoutStep: SingleStep): String { - val name = workoutStep.name.orEmpty().replace("\\", "/") + val description = getDescription(structure.target, workoutStep) val length = toStepLength(workoutStep.length) val targetUnitStr = targetTypeMap[structure.target]!! - val target: String = if (workoutStep.target.isSingleValue()) { - "${workoutStep.target.start}" - } else { - "${workoutStep.target.start}-${workoutStep.target.end}" - } + val target = toTarget(structure.target, workoutStep.target) val cadence = workoutStep.cadence?.let { if (it.isSingleValue()) { "${it.start}rpm" @@ -47,11 +44,40 @@ class ToIntervalsStructureConverter( } } ?: "" - return "- $name $length $target$targetUnitStr ${structure.modifier.value} $cadence" + return "- $description $length $target$targetUnitStr ${structure.modifier.value} $cadence" } private fun toStepLength(length: StepLength) = when (length.unit) { LengthUnit.SECONDS -> Duration.ofSeconds(length.value).toString().substring(2).lowercase() LengthUnit.METERS -> (length.value / 1000.0).toString() + "km" } + + private fun toTarget(targetUnit: WorkoutStructure.TargetUnit, target: StepTarget) : String { + val targetVal = + if (targetUnit == WorkoutStructure.TargetUnit.RELATIVE_PERCEIVED_EFFORT) { + "" + } else { + if (target.isSingleValue()) { + "${target.start}" + } else { + "${target.start}-${target.end}" + } + } + + return targetVal + } + + private fun getDescription(targetUnit: WorkoutStructure.TargetUnit, workoutStep: SingleStep) : String { + var description = workoutStep.name.orEmpty().replace("\\", "/") + + if (targetUnit == WorkoutStructure.TargetUnit.RELATIVE_PERCEIVED_EFFORT) { + if (workoutStep.target.isSingleValue()) { + description += " RPE ${workoutStep.target.start}" + } else { + description += " RPE ${workoutStep.target.start}-${workoutStep.target.end}" + } + } + + return description.trim() + } } diff --git a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/trainingpeaks/workout/structure/TPTargetMapper.kt b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/trainingpeaks/workout/structure/TPTargetMapper.kt index b945912e..08f8c1fc 100644 --- a/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/trainingpeaks/workout/structure/TPTargetMapper.kt +++ b/boot/src/main/kotlin/org/freekode/tp2intervals/infrastructure/platform/trainingpeaks/workout/structure/TPTargetMapper.kt @@ -8,6 +8,7 @@ class TPTargetMapper { WorkoutStructure.TargetUnit.FTP_PERCENTAGE to "percentOfFtp", WorkoutStructure.TargetUnit.LTHR_PERCENTAGE to "percentOfThresholdHr", WorkoutStructure.TargetUnit.PACE_PERCENTAGE to "percentOfThresholdPace", + WorkoutStructure.TargetUnit.RELATIVE_PERCEIVED_EFFORT to "rpe", ) fun getByIntensity(intensity: String): WorkoutStructure.TargetUnit =