feat(exécution): dernière performance et meilleur score par exercice (ticket #81)

Ajoute la migration Drift v17 (colonne sourceExerciseIdSnapshot sur
workout_history_set_results et workout_history_step_results, index
associés), le port ExercisePerformanceReferenceRepository et son
implémentation Drift, et le use case
ExercisePerformanceReferenceUseCase (dernière performance + meilleur
score par métrique active pour un exercice donné).

Validé GO par Main : dart analyze propre (1 lint mineur de style),
178 tests (4 échecs préexistants sans rapport avec ce lot).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 07:54:49 +02:00
parent e05405157a
commit ac51c16b51
10 changed files with 1073 additions and 3 deletions

View File

@ -1444,6 +1444,7 @@ final class WorkoutHistorySetResult {
this.scoreInputModeSnapshot = ScoreInputMode.manual,
this.scoreLabelSnapshot,
this.scoreUnitSnapshot,
this.sourceExerciseIdSnapshot,
this.startedAt,
this.completedAt,
this.status = SetResultStatus.completed,
@ -1493,6 +1494,7 @@ final class WorkoutHistorySetResult {
final ScoreInputMode scoreInputModeSnapshot;
final String? scoreLabelSnapshot;
final String? scoreUnitSnapshot;
final String? sourceExerciseIdSnapshot;
final DateTime? startedAt;
final DateTime? completedAt;
final SetResultStatus status;
@ -1527,6 +1529,7 @@ final class WorkoutHistoryStepResult {
this.actualScore,
this.actualScoreTimeMs,
this.note,
this.sourceExerciseIdSnapshot,
}) {
_validateExerciseStepResult(
programIndex: programIndex,
@ -1577,6 +1580,7 @@ final class WorkoutHistoryStepResult {
final double? actualScore;
final int? actualScoreTimeMs;
final String? note;
final String? sourceExerciseIdSnapshot;
}
String _nonBlank(String? value, String label) {