feat(data): édition ponctuelle des séries en séance (ticket #21)
Étend le modèle Drift (tables.dart, app_database.dart/.g.dart) et la couche application (entités, use cases, repositories) pour supporter l'édition ponctuelle des séries pendant l'exécution d'une séance, sans modifier le modèle/séance-modèle. build_runner OK, flutter analyze propre, 30/30 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -8,6 +8,8 @@ enum WorkoutMeasure { time, reps, score }
|
||||
|
||||
enum ActiveWorkoutStatus { running, paused, savedExit, completed, abandoned }
|
||||
|
||||
enum SetResultStatus { completed, skipped }
|
||||
|
||||
final class DomainException implements Exception {
|
||||
const DomainException(this.message);
|
||||
|
||||
@ -572,7 +574,7 @@ final class ActiveWorkoutSession {
|
||||
}
|
||||
|
||||
final class ActiveSetResult {
|
||||
const ActiveSetResult({
|
||||
ActiveSetResult({
|
||||
required this.metadata,
|
||||
required this.activeWorkoutSessionId,
|
||||
required this.programSnapshotId,
|
||||
@ -588,7 +590,13 @@ final class ActiveSetResult {
|
||||
this.scoreLabelSnapshot,
|
||||
this.scoreUnitSnapshot,
|
||||
this.note,
|
||||
});
|
||||
this.status = SetResultStatus.completed,
|
||||
}) {
|
||||
if (status == SetResultStatus.skipped &&
|
||||
(actualTimeMs != null || actualReps != null || actualScore != null)) {
|
||||
throw const DomainException('Skipped set results cannot have values.');
|
||||
}
|
||||
}
|
||||
|
||||
final EntityMetadata metadata;
|
||||
final String activeWorkoutSessionId;
|
||||
@ -605,6 +613,7 @@ final class ActiveSetResult {
|
||||
final String? scoreLabelSnapshot;
|
||||
final String? scoreUnitSnapshot;
|
||||
final String? note;
|
||||
final SetResultStatus status;
|
||||
}
|
||||
|
||||
final class ActiveRestState {
|
||||
@ -682,7 +691,7 @@ final class WorkoutHistory {
|
||||
}
|
||||
|
||||
final class WorkoutHistorySetResult {
|
||||
const WorkoutHistorySetResult({
|
||||
WorkoutHistorySetResult({
|
||||
required this.metadata,
|
||||
required this.workoutHistoryId,
|
||||
required this.programSnapshotId,
|
||||
@ -705,7 +714,15 @@ final class WorkoutHistorySetResult {
|
||||
this.scoreUnitSnapshot,
|
||||
this.startedAt,
|
||||
this.completedAt,
|
||||
});
|
||||
this.status = SetResultStatus.completed,
|
||||
}) {
|
||||
if (status == SetResultStatus.skipped &&
|
||||
(actualTimeMs != null || actualReps != null || actualScore != null)) {
|
||||
throw const DomainException(
|
||||
'Skipped history results cannot have values.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final EntityMetadata metadata;
|
||||
final String workoutHistoryId;
|
||||
@ -729,6 +746,7 @@ final class WorkoutHistorySetResult {
|
||||
final String? scoreUnitSnapshot;
|
||||
final DateTime? startedAt;
|
||||
final DateTime? completedAt;
|
||||
final SetResultStatus status;
|
||||
}
|
||||
|
||||
String _nonBlank(String? value, String label) {
|
||||
|
||||
Reference in New Issue
Block a user