diff --git a/lib/application/ports.dart b/lib/application/ports.dart index 5c46e1e..dd9be66 100644 --- a/lib/application/ports.dart +++ b/lib/application/ports.dart @@ -80,9 +80,26 @@ abstract interface class ActiveSessionRepository { Future save(ActiveWorkoutSession session); Future saveSetResult(ActiveSetResult result); Future saveRestState(ActiveRestState restState); + Future saveScoreStopwatchState(ActiveScoreStopwatchState state); + Future deleteScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required DateTime deletedAt, + }); Future findRestStateById(String id); + Future findScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }); Future> listSetResults(String sessionId); Future> listRestStates(String sessionId); + Future> listScoreStopwatchStates( + String sessionId, + ); } abstract interface class WorkoutHistoryRepository { diff --git a/lib/application/use_cases.dart b/lib/application/use_cases.dart index 8393b2e..5456401 100644 --- a/lib/application/use_cases.dart +++ b/lib/application/use_cases.dart @@ -24,6 +24,7 @@ final class ExerciseUseCases { required bool hasTimeMeasure, required bool hasRepsMeasure, required bool hasScoreMeasure, + ScoreInputMode scoreInputMode = ScoreInputMode.manual, String? scoreLabel, String? scoreUnit, }) async { @@ -37,6 +38,7 @@ final class ExerciseUseCases { hasTimeMeasure: hasTimeMeasure, hasRepsMeasure: hasRepsMeasure, hasScoreMeasure: hasScoreMeasure, + scoreInputMode: scoreInputMode, scoreLabel: scoreLabel, scoreUnit: scoreUnit, ); @@ -61,6 +63,7 @@ final class ExerciseUseCases { required bool hasTimeMeasure, required bool hasRepsMeasure, required bool hasScoreMeasure, + ScoreInputMode scoreInputMode = ScoreInputMode.manual, String? scoreLabel, String? scoreUnit, }) async { @@ -77,6 +80,7 @@ final class ExerciseUseCases { hasTimeMeasure: hasTimeMeasure, hasRepsMeasure: hasRepsMeasure, hasScoreMeasure: hasScoreMeasure, + scoreInputMode: scoreInputMode, scoreLabel: scoreLabel, scoreUnit: scoreUnit, ); @@ -285,6 +289,7 @@ final class ProgramUseCases { availableTimeSnapshot: input.availableTimeSnapshot, availableRepsSnapshot: input.availableRepsSnapshot, availableScoreSnapshot: input.availableScoreSnapshot, + scoreInputModeSnapshot: input.scoreInputModeSnapshot, scoreLabelSnapshot: input.scoreLabelSnapshot, scoreUnitSnapshot: input.scoreUnitSnapshot, setsCount: input.setsCount, @@ -294,6 +299,7 @@ final class ProgramUseCases { targetTimeSeconds: input.targetTimeSeconds, targetReps: input.targetReps, targetScore: input.targetScore, + targetScoreTimeMs: input.targetScoreTimeMs, restSecondsOverride: input.restSecondsOverride, ), ); @@ -317,6 +323,7 @@ final class ProgramUseCases { int? targetTimeSeconds, int? targetReps, double? targetScore, + int? targetScoreTimeMs, int? restSecondsOverride, }) async { final source = await exerciseRepository.findById(exerciseId); @@ -334,6 +341,7 @@ final class ProgramUseCases { targetTimeSeconds: targetTimeSeconds, targetReps: targetReps, targetScore: targetScore, + targetScoreTimeMs: targetScoreTimeMs, restSecondsOverride: restSecondsOverride, ); await programRepository.saveExercise(programExercise); @@ -353,6 +361,7 @@ final class ProgramExerciseConfig { required this.availableTimeSnapshot, required this.availableRepsSnapshot, required this.availableScoreSnapshot, + this.scoreInputModeSnapshot = ScoreInputMode.manual, this.scoreLabelSnapshot, this.scoreUnitSnapshot, required this.setsCount, @@ -360,6 +369,7 @@ final class ProgramExerciseConfig { this.targetTimeSeconds, this.targetReps, this.targetScore, + this.targetScoreTimeMs, this.restSecondsOverride, }); @@ -373,6 +383,7 @@ final class ProgramExerciseConfig { final bool availableTimeSnapshot; final bool availableRepsSnapshot; final bool availableScoreSnapshot; + final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final int setsCount; @@ -380,6 +391,7 @@ final class ProgramExerciseConfig { final int? targetTimeSeconds; final int? targetReps; final double? targetScore; + final int? targetScoreTimeMs; final int? restSecondsOverride; } @@ -480,6 +492,7 @@ final class WorkoutTemplateUseCases { targetTimeSecondsOverride: input.targetTimeSecondsOverride, targetRepsOverride: input.targetRepsOverride, targetScoreOverride: input.targetScoreOverride, + targetScoreTimeMsOverride: input.targetScoreTimeMsOverride, ), ); } @@ -521,6 +534,7 @@ final class WorkoutTemplateUseCases { int? targetTimeSecondsOverride, int? targetRepsOverride, double? targetScoreOverride, + int? targetScoreTimeMsOverride, Set? attemptedMeasureOverride, }) async { if (attemptedMeasureOverride != null) { @@ -537,6 +551,7 @@ final class WorkoutTemplateUseCases { targetTimeSecondsOverride: targetTimeSecondsOverride, targetRepsOverride: targetRepsOverride, targetScoreOverride: targetScoreOverride, + targetScoreTimeMsOverride: targetScoreTimeMsOverride, ); await templateRepository.saveOverride(override); return override; @@ -570,6 +585,7 @@ final class WorkoutTemplateExerciseOverrideConfig { this.targetTimeSecondsOverride, this.targetRepsOverride, this.targetScoreOverride, + this.targetScoreTimeMsOverride, }); final EntityMetadata? existingMetadata; @@ -579,6 +595,7 @@ final class WorkoutTemplateExerciseOverrideConfig { final int? targetTimeSecondsOverride; final int? targetRepsOverride; final double? targetScoreOverride; + final int? targetScoreTimeMsOverride; } final class ActiveWorkoutSessionUseCases { @@ -635,6 +652,7 @@ final class ActiveWorkoutSessionUseCases { 'targetTimeSecondsOverride': override.targetTimeSecondsOverride, 'targetRepsOverride': override.targetRepsOverride, 'targetScoreOverride': override.targetScoreOverride, + 'targetScoreTimeMsOverride': override.targetScoreTimeMsOverride, }, ) .toList(), @@ -668,7 +686,21 @@ final class ActiveWorkoutSessionUseCases { Future pause(String sessionId) async { final session = await _requiredSession(sessionId); - final paused = session.pause(clock.now()); + final now = clock.now(); + final runningStopwatches = + (await sessionRepository.listScoreStopwatchStates( + sessionId, + )).where((state) => state.status == ActiveScoreStopwatchStatus.running); + for (final state in runningStopwatches) { + final stopped = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveScoreStopwatchStatus.stopped, + accumulatedMs: state.elapsedMillisecondsAt(now), + stoppedAt: now, + ); + await sessionRepository.saveScoreStopwatchState(stopped); + } + final paused = session.pause(now); await sessionRepository.save(paused); return paused; } @@ -699,10 +731,21 @@ final class ActiveWorkoutSessionUseCases { int? actualTimeMs, int? actualReps, double? actualScore, + int? actualScoreTimeMs, + ScoreInputMode scoreInputModeSnapshot = ScoreInputMode.manual, String? scoreLabelSnapshot, String? scoreUnitSnapshot, }) async { final now = clock.now(); + final resolvedActualScoreTimeMs = await _resolveStopwatchScoreTimeMs( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + scoreInputMode: scoreInputModeSnapshot, + explicitActualScoreTimeMs: actualScoreTimeMs, + now: now, + ); final result = ActiveSetResult( metadata: _newMetadata(ids, originDeviceId, now), activeWorkoutSessionId: sessionId, @@ -715,6 +758,8 @@ final class ActiveWorkoutSessionUseCases { actualTimeMs: actualTimeMs, actualReps: actualReps, actualScore: actualScore, + actualScoreTimeMs: resolvedActualScoreTimeMs, + scoreInputModeSnapshot: scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, status: SetResultStatus.completed, @@ -732,6 +777,8 @@ final class ActiveWorkoutSessionUseCases { int? actualTimeMs, int? actualReps, double? actualScore, + int? actualScoreTimeMs, + ScoreInputMode? scoreInputModeSnapshot, String? scoreLabelSnapshot, String? scoreUnitSnapshot, String? note, @@ -766,6 +813,8 @@ final class ActiveWorkoutSessionUseCases { } final now = clock.now(); final isSkipped = status == SetResultStatus.skipped; + final resolvedScoreInputMode = + scoreInputModeSnapshot ?? snapshot.scoreInputModeSnapshot; final upserted = ActiveSetResult( metadata: existing == null ? _newMetadata(ids, originDeviceId, now) @@ -781,6 +830,8 @@ final class ActiveWorkoutSessionUseCases { actualTimeMs: isSkipped ? null : actualTimeMs, actualReps: isSkipped ? null : actualReps, actualScore: isSkipped ? null : actualScore, + actualScoreTimeMs: isSkipped ? null : actualScoreTimeMs, + scoreInputModeSnapshot: resolvedScoreInputMode, scoreLabelSnapshot: isSkipped ? null : scoreLabelSnapshot ?? snapshot.scoreLabelSnapshot, @@ -794,6 +845,102 @@ final class ActiveWorkoutSessionUseCases { return upserted; } + Future startScoreStopwatch({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + await _requiredSession(sessionId); + final now = clock.now(); + final existing = await sessionRepository.findScoreStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (existing != null) { + if (existing.status == ActiveScoreStopwatchStatus.running) { + return existing; + } + final resumed = existing.copyWith( + metadata: existing.metadata.touch(now), + status: ActiveScoreStopwatchStatus.running, + startedAt: now, + stoppedAt: null, + ); + await sessionRepository.saveScoreStopwatchState(resumed); + return resumed; + } + final state = ActiveScoreStopwatchState( + metadata: _newMetadata(ids, originDeviceId, now), + activeWorkoutSessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + status: ActiveScoreStopwatchStatus.running, + startedAt: now, + accumulatedMs: 0, + ); + await sessionRepository.saveScoreStopwatchState(state); + return state; + } + + Future stopScoreStopwatch({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await _requiredStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state.status == ActiveScoreStopwatchStatus.stopped) { + return state; + } + final now = clock.now(); + final stopped = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveScoreStopwatchStatus.stopped, + accumulatedMs: state.elapsedMillisecondsAt(now), + stoppedAt: now, + ); + await sessionRepository.saveScoreStopwatchState(stopped); + return stopped; + } + + Future resumeScoreStopwatch({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) { + return startScoreStopwatch( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + } + + Future resetScoreStopwatch({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + await sessionRepository.deleteScoreStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + deletedAt: clock.now(), + ); + } + Future> listSetResults(String sessionId) async { final session = await _requiredSession(sessionId); final snapshots = _listSetSnapshots(session.resolvedTemplateSnapshotJson); @@ -960,6 +1107,58 @@ final class ActiveWorkoutSessionUseCases { } return session; } + + Future _requiredStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await sessionRepository.findScoreStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state == null) { + throw const DomainException('Active score stopwatch state not found.'); + } + return state; + } + + Future _resolveStopwatchScoreTimeMs({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required ScoreInputMode scoreInputMode, + required int? explicitActualScoreTimeMs, + required DateTime now, + }) async { + if (scoreInputMode != ScoreInputMode.stopwatch) { + return explicitActualScoreTimeMs; + } + final state = await sessionRepository.findScoreStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state == null) { + return explicitActualScoreTimeMs; + } + if (state.status == ActiveScoreStopwatchStatus.stopped) { + return explicitActualScoreTimeMs ?? state.accumulatedMs; + } + final stopped = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveScoreStopwatchStatus.stopped, + accumulatedMs: state.elapsedMillisecondsAt(now), + stoppedAt: now, + ); + await sessionRepository.saveScoreStopwatchState(stopped); + return explicitActualScoreTimeMs ?? stopped.accumulatedMs; + } } final class CloseWorkoutSessionUseCase { @@ -1025,6 +1224,8 @@ final class CloseWorkoutSessionUseCase { 'actualTimeMs': result.actualTimeMs, 'actualReps': result.actualReps, 'actualScore': result.actualScore, + 'actualScoreTimeMs': result.actualScoreTimeMs, + 'scoreInputModeSnapshot': result.scoreInputModeSnapshot.name, 'scoreLabelSnapshot': result.scoreLabelSnapshot, 'scoreUnitSnapshot': result.scoreUnitSnapshot, 'status': result.status.name, @@ -1096,6 +1297,22 @@ void _validateOverrideTargets( if (input.targetScoreOverride != null && exercise['scoreEnabled'] != true) { throw const DomainException('Cannot override inactive score target.'); } + if (input.targetScoreTimeMsOverride != null && + exercise['scoreEnabled'] != true) { + throw const DomainException('Cannot override inactive score target.'); + } + final mode = _scoreInputModeFromSnapshot(exercise['scoreInputModeSnapshot']); + if (input.targetScoreOverride != null && mode != ScoreInputMode.manual) { + throw const DomainException( + 'Cannot override manual score target on stopwatch score mode.', + ); + } + if (input.targetScoreTimeMsOverride != null && + mode != ScoreInputMode.stopwatch) { + throw const DomainException( + 'Cannot override stopwatch score target on manual score mode.', + ); + } } void _ensureEditablePastPosition({ @@ -1142,6 +1359,13 @@ String _positionKey(int programIndex, int exerciseIndex, int setIndex) { return '$programIndex:$exerciseIndex:$setIndex'; } +ScoreInputMode _scoreInputModeFromSnapshot(Object? value) { + return switch (value) { + 'stopwatch' => ScoreInputMode.stopwatch, + _ => ScoreInputMode.manual, + }; +} + _SetPositionSnapshot? _findSetSnapshot({ required String resolvedTemplateSnapshotJson, required int programIndex, @@ -1196,6 +1420,9 @@ List<_SetPositionSnapshot> _listSetSnapshots( setIndex: setIndex, scoreLabelSnapshot: exercise['scoreLabelSnapshot'] as String?, scoreUnitSnapshot: exercise['scoreUnitSnapshot'] as String?, + scoreInputModeSnapshot: _scoreInputModeFromSnapshot( + exercise['scoreInputModeSnapshot'], + ), ), ); } @@ -1213,6 +1440,7 @@ final class _SetPositionSnapshot { required this.setIndex, this.scoreLabelSnapshot, this.scoreUnitSnapshot, + required this.scoreInputModeSnapshot, }); final String programSnapshotId; @@ -1222,6 +1450,7 @@ final class _SetPositionSnapshot { final int setIndex; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; + final ScoreInputMode scoreInputModeSnapshot; } List _historyResultsFromActiveResults({ @@ -1250,13 +1479,18 @@ List _historyResultsFromActiveResults({ timeEnabledSnapshot: snapshot?.timeEnabled ?? result.actualTimeMs != null, repsEnabledSnapshot: snapshot?.repsEnabled ?? result.actualReps != null, scoreEnabledSnapshot: - snapshot?.scoreEnabled ?? result.actualScore != null, + snapshot?.scoreEnabled ?? + (result.actualScore != null || result.actualScoreTimeMs != null), targetTimeSecondsSnapshot: snapshot?.targetTimeSeconds, targetRepsSnapshot: snapshot?.targetReps, targetScoreSnapshot: snapshot?.targetScore, + targetScoreTimeMsSnapshot: snapshot?.targetScoreTimeMs, actualTimeMs: result.actualTimeMs, actualReps: result.actualReps, actualScore: result.actualScore, + actualScoreTimeMs: result.actualScoreTimeMs, + scoreInputModeSnapshot: + snapshot?.scoreInputModeSnapshot ?? result.scoreInputModeSnapshot, scoreLabelSnapshot: result.scoreLabelSnapshot ?? snapshot?.scoreLabelSnapshot, scoreUnitSnapshot: @@ -1299,6 +1533,10 @@ Map _exerciseSnapshotsById( targetTimeSeconds: exercise['targetTimeSeconds'] as int?, targetReps: exercise['targetReps'] as int?, targetScore: (exercise['targetScore'] as num?)?.toDouble(), + targetScoreTimeMs: exercise['targetScoreTimeMs'] as int?, + scoreInputModeSnapshot: _scoreInputModeFromSnapshot( + exercise['scoreInputModeSnapshot'], + ), scoreLabelSnapshot: exercise['scoreLabelSnapshot'] as String?, scoreUnitSnapshot: exercise['scoreUnitSnapshot'] as String?, ); @@ -1317,6 +1555,8 @@ final class _ResolvedExerciseSnapshot { this.targetTimeSeconds, this.targetReps, this.targetScore, + this.targetScoreTimeMs, + required this.scoreInputModeSnapshot, this.scoreLabelSnapshot, this.scoreUnitSnapshot, }); @@ -1329,6 +1569,8 @@ final class _ResolvedExerciseSnapshot { final int? targetTimeSeconds; final int? targetReps; final double? targetScore; + final int? targetScoreTimeMs; + final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; } diff --git a/lib/domain/entities.dart b/lib/domain/entities.dart index fce8387..fadfe16 100644 --- a/lib/domain/entities.dart +++ b/lib/domain/entities.dart @@ -6,10 +6,14 @@ enum MediaKind { image, video } enum WorkoutMeasure { time, reps, score } +enum ScoreInputMode { manual, stopwatch } + enum ActiveWorkoutStatus { running, paused, savedExit, completed, abandoned } enum SetResultStatus { completed, skipped } +enum ActiveScoreStopwatchStatus { running, stopped } + final class DomainException implements Exception { const DomainException(this.message); @@ -125,6 +129,7 @@ final class Exercise { required this.hasTimeMeasure, required this.hasRepsMeasure, required this.hasScoreMeasure, + this.scoreInputMode = ScoreInputMode.manual, this.scoreLabel, this.scoreUnit, this.archivedAt, @@ -134,7 +139,12 @@ final class Exercise { hasReps: hasRepsMeasure, hasScore: hasScoreMeasure, ); - if (hasScoreMeasure) { + if (!hasScoreMeasure && scoreInputMode == ScoreInputMode.stopwatch) { + throw const DomainException( + 'Stopwatch score mode requires an active score measure.', + ); + } + if (hasScoreMeasure && scoreInputMode == ScoreInputMode.manual) { _nonBlank(scoreLabel, 'Score label'); _nonBlank(scoreUnit, 'Score unit'); } @@ -148,6 +158,7 @@ final class Exercise { final bool hasTimeMeasure; final bool hasRepsMeasure; final bool hasScoreMeasure; + final ScoreInputMode scoreInputMode; final String? scoreLabel; final String? scoreUnit; final DateTime? archivedAt; @@ -171,6 +182,7 @@ final class Exercise { bool? hasTimeMeasure, bool? hasRepsMeasure, bool? hasScoreMeasure, + ScoreInputMode? scoreInputMode, Object? scoreLabel = _unchanged, Object? scoreUnit = _unchanged, Object? archivedAt = _unchanged, @@ -190,6 +202,7 @@ final class Exercise { hasTimeMeasure: hasTimeMeasure ?? this.hasTimeMeasure, hasRepsMeasure: hasRepsMeasure ?? this.hasRepsMeasure, hasScoreMeasure: hasScoreMeasure ?? this.hasScoreMeasure, + scoreInputMode: scoreInputMode ?? this.scoreInputMode, scoreLabel: scoreLabel == _unchanged ? this.scoreLabel : scoreLabel as String?, @@ -249,6 +262,7 @@ final class ProgramExercise { required this.availableTimeSnapshot, required this.availableRepsSnapshot, required this.availableScoreSnapshot, + this.scoreInputModeSnapshot = ScoreInputMode.manual, this.scoreLabelSnapshot, this.scoreUnitSnapshot, required this.setsCount, @@ -258,6 +272,7 @@ final class ProgramExercise { this.targetTimeSeconds, this.targetReps, this.targetScore, + this.targetScoreTimeMs, this.restSecondsOverride, }) : exerciseNameSnapshot = _nonBlank( exerciseNameSnapshot, @@ -282,7 +297,14 @@ final class ProgramExercise { _requireNullablePositive(targetTimeSeconds, 'Target time seconds'); _requireNullablePositive(targetReps, 'Target reps'); _requireNullableNonNegativeDouble(targetScore, 'Target score'); + _requireNullablePositive(targetScoreTimeMs, 'Target score time ms'); _requireNullableNonNegative(restSecondsOverride, 'Rest seconds override'); + _requireScoreTargetShape( + scoreEnabled: scoreEnabled, + scoreInputMode: scoreInputModeSnapshot, + targetScore: targetScore, + targetScoreTimeMs: targetScoreTimeMs, + ); } final EntityMetadata metadata; @@ -297,6 +319,7 @@ final class ProgramExercise { final bool availableTimeSnapshot; final bool availableRepsSnapshot; final bool availableScoreSnapshot; + final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final int setsCount; @@ -306,6 +329,7 @@ final class ProgramExercise { final int? targetTimeSeconds; final int? targetReps; final double? targetScore; + final int? targetScoreTimeMs; final int? restSecondsOverride; static ProgramExercise snapshotFromExercise({ @@ -318,6 +342,7 @@ final class ProgramExercise { int? targetTimeSeconds, int? targetReps, double? targetScore, + int? targetScoreTimeMs, int? restSecondsOverride, }) { final available = exercise.availableMeasures; @@ -339,6 +364,7 @@ final class ProgramExercise { availableTimeSnapshot: exercise.hasTimeMeasure, availableRepsSnapshot: exercise.hasRepsMeasure, availableScoreSnapshot: exercise.hasScoreMeasure, + scoreInputModeSnapshot: exercise.scoreInputMode, scoreLabelSnapshot: exercise.scoreLabel, scoreUnitSnapshot: exercise.scoreUnit, setsCount: setsCount, @@ -348,6 +374,7 @@ final class ProgramExercise { targetTimeSeconds: targetTimeSeconds, targetReps: targetReps, targetScore: targetScore, + targetScoreTimeMs: targetScoreTimeMs, restSecondsOverride: restSecondsOverride, ); } @@ -364,6 +391,7 @@ final class ProgramExercise { 'availableTimeSnapshot': availableTimeSnapshot, 'availableRepsSnapshot': availableRepsSnapshot, 'availableScoreSnapshot': availableScoreSnapshot, + 'scoreInputModeSnapshot': scoreInputModeSnapshot.name, 'scoreLabelSnapshot': scoreLabelSnapshot, 'scoreUnitSnapshot': scoreUnitSnapshot, 'setsCount': setsCount, @@ -373,6 +401,7 @@ final class ProgramExercise { 'targetTimeSeconds': targetTimeSeconds, 'targetReps': targetReps, 'targetScore': targetScore, + 'targetScoreTimeMs': targetScoreTimeMs, 'restSecondsOverride': restSecondsOverride, }; } @@ -452,6 +481,7 @@ final class WorkoutTemplateExerciseOverride { this.targetTimeSecondsOverride, this.targetRepsOverride, this.targetScoreOverride, + this.targetScoreTimeMsOverride, }) : snapshotProgramExerciseId = _nonBlank( snapshotProgramExerciseId, 'Snapshot program exercise id', @@ -466,6 +496,15 @@ final class WorkoutTemplateExerciseOverride { targetScoreOverride, 'Target score override', ); + _requireNullablePositive( + targetScoreTimeMsOverride, + 'Target score time ms override', + ); + if (targetScoreOverride != null && targetScoreTimeMsOverride != null) { + throw const DomainException( + 'Manual and stopwatch score overrides cannot both be set.', + ); + } } final EntityMetadata metadata; @@ -475,6 +514,7 @@ final class WorkoutTemplateExerciseOverride { final int? targetTimeSecondsOverride; final int? targetRepsOverride; final double? targetScoreOverride; + final int? targetScoreTimeMsOverride; } final class ActiveWorkoutSession { @@ -587,15 +627,25 @@ final class ActiveSetResult { this.actualTimeMs, this.actualReps, this.actualScore, + this.actualScoreTimeMs, + this.scoreInputModeSnapshot = ScoreInputMode.manual, this.scoreLabelSnapshot, this.scoreUnitSnapshot, this.note, this.status = SetResultStatus.completed, }) { if (status == SetResultStatus.skipped && - (actualTimeMs != null || actualReps != null || actualScore != null)) { + (actualTimeMs != null || + actualReps != null || + actualScore != null || + actualScoreTimeMs != null)) { throw const DomainException('Skipped set results cannot have values.'); } + _requireScoreResultShape( + scoreInputMode: scoreInputModeSnapshot, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); } final EntityMetadata metadata; @@ -610,12 +660,72 @@ final class ActiveSetResult { final int? actualTimeMs; final int? actualReps; final double? actualScore; + final int? actualScoreTimeMs; + final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final String? note; final SetResultStatus status; } +final class ActiveScoreStopwatchState { + ActiveScoreStopwatchState({ + required this.metadata, + required this.activeWorkoutSessionId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.status, + required this.startedAt, + required this.accumulatedMs, + this.stoppedAt, + }) { + _requireNonNegative(programIndex, 'Program index'); + _requireNonNegative(exerciseIndex, 'Exercise index'); + _requireNonNegative(setIndex, 'Set index'); + _requireNonNegative(accumulatedMs, 'Accumulated milliseconds'); + } + + final EntityMetadata metadata; + final String activeWorkoutSessionId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final ActiveScoreStopwatchStatus status; + final DateTime startedAt; + final int accumulatedMs; + final DateTime? stoppedAt; + + int elapsedMillisecondsAt(DateTime now) { + if (status == ActiveScoreStopwatchStatus.stopped) { + return accumulatedMs; + } + return accumulatedMs + now.difference(startedAt).inMilliseconds; + } + + ActiveScoreStopwatchState copyWith({ + EntityMetadata? metadata, + ActiveScoreStopwatchStatus? status, + DateTime? startedAt, + int? accumulatedMs, + Object? stoppedAt = _unchanged, + }) { + return ActiveScoreStopwatchState( + metadata: metadata ?? this.metadata, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + stoppedAt: stoppedAt == _unchanged + ? this.stoppedAt + : stoppedAt as DateTime?, + ); + } +} + final class ActiveRestState { const ActiveRestState({ required this.metadata, @@ -707,9 +817,12 @@ final class WorkoutHistorySetResult { this.targetTimeSecondsSnapshot, this.targetRepsSnapshot, this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, this.actualTimeMs, this.actualReps, this.actualScore, + this.actualScoreTimeMs, + this.scoreInputModeSnapshot = ScoreInputMode.manual, this.scoreLabelSnapshot, this.scoreUnitSnapshot, this.startedAt, @@ -717,11 +830,25 @@ final class WorkoutHistorySetResult { this.status = SetResultStatus.completed, }) { if (status == SetResultStatus.skipped && - (actualTimeMs != null || actualReps != null || actualScore != null)) { + (actualTimeMs != null || + actualReps != null || + actualScore != null || + actualScoreTimeMs != null)) { throw const DomainException( 'Skipped history results cannot have values.', ); } + _requireScoreTargetShape( + scoreEnabled: scoreEnabledSnapshot, + scoreInputMode: scoreInputModeSnapshot, + targetScore: targetScoreSnapshot, + targetScoreTimeMs: targetScoreTimeMsSnapshot, + ); + _requireScoreResultShape( + scoreInputMode: scoreInputModeSnapshot, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); } final EntityMetadata metadata; @@ -739,9 +866,12 @@ final class WorkoutHistorySetResult { final int? targetTimeSecondsSnapshot; final int? targetRepsSnapshot; final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; final int? actualTimeMs; final int? actualReps; final double? actualScore; + final int? actualScoreTimeMs; + final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final DateTime? startedAt; @@ -796,3 +926,50 @@ void _requireNullableNonNegativeDouble(double? value, String label) { throw DomainException('$label must not be negative.'); } } + +void _requireScoreTargetShape({ + required bool scoreEnabled, + required ScoreInputMode scoreInputMode, + required double? targetScore, + required int? targetScoreTimeMs, +}) { + if (targetScore != null && targetScoreTimeMs != null) { + throw const DomainException( + 'Manual and stopwatch score targets cannot both be set.', + ); + } + if (targetScore != null && + (!scoreEnabled || scoreInputMode != ScoreInputMode.manual)) { + throw const DomainException( + 'Manual score target requires manual score mode.', + ); + } + if (targetScoreTimeMs != null && + (!scoreEnabled || scoreInputMode != ScoreInputMode.stopwatch)) { + throw const DomainException( + 'Stopwatch score target requires stopwatch score mode.', + ); + } +} + +void _requireScoreResultShape({ + required ScoreInputMode scoreInputMode, + required double? actualScore, + required int? actualScoreTimeMs, +}) { + if (actualScore != null && actualScoreTimeMs != null) { + throw const DomainException( + 'Manual and stopwatch score results cannot both be set.', + ); + } + if (actualScore != null && scoreInputMode != ScoreInputMode.manual) { + throw const DomainException( + 'Manual score result requires manual score mode.', + ); + } + if (actualScoreTimeMs != null && scoreInputMode != ScoreInputMode.stopwatch) { + throw const DomainException( + 'Stopwatch score result requires stopwatch score mode.', + ); + } +} diff --git a/lib/infrastructure/local/app_database.dart b/lib/infrastructure/local/app_database.dart index 8330e5d..43cfd1c 100644 --- a/lib/infrastructure/local/app_database.dart +++ b/lib/infrastructure/local/app_database.dart @@ -8,6 +8,7 @@ part 'app_database.g.dart'; @DriftDatabase( tables: [ ActiveRestStates, + ActiveScoreStopwatchStates, ActiveSetResults, ActiveWorkoutSessions, ChangeLogEntries, @@ -35,7 +36,7 @@ final class AppDatabase extends _$AppDatabase { } @override - int get schemaVersion => 2; + int get schemaVersion => 3; @override MigrationStrategy get migration { @@ -56,6 +57,10 @@ final class AppDatabase extends _$AppDatabase { "'skipped'))", ); } + if (from < 3) { + await _migrateToSchema3(migrator); + } + await _createIndexes(); }, beforeOpen: (details) async { await customStatement('PRAGMA foreign_keys = ON'); @@ -95,6 +100,10 @@ final class AppDatabase extends _$AppDatabase { 'CREATE INDEX IF NOT EXISTS idx_active_set_results_session_id ' 'ON active_set_results (active_workout_session_id)', ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS idx_active_score_stopwatch_states_session_id ' + 'ON active_score_stopwatch_states (active_workout_session_id)', + ); await customStatement( 'CREATE INDEX IF NOT EXISTS idx_active_rest_states_session_id ' 'ON active_rest_states (active_workout_session_id)', @@ -131,6 +140,7 @@ final class AppDatabase extends _$AppDatabase { const _syncableTableNames = [ 'active_rest_states', + 'active_score_stopwatch_states', 'active_set_results', 'active_workout_sessions', 'exercises', @@ -143,3 +153,53 @@ const _syncableTableNames = [ 'workout_template_programs', 'workout_templates', ]; + +extension on AppDatabase { + Future _migrateToSchema3(Migrator migrator) async { + await customStatement( + 'ALTER TABLE exercises ADD COLUMN score_input_mode TEXT NOT NULL ' + "DEFAULT 'manual' CHECK (score_input_mode IN ('manual', 'stopwatch'))", + ); + await customStatement( + 'ALTER TABLE program_exercises ADD COLUMN score_input_mode_snapshot TEXT ' + "NOT NULL DEFAULT 'manual' CHECK (score_input_mode_snapshot IN " + "('manual', 'stopwatch'))", + ); + await customStatement( + 'ALTER TABLE program_exercises ADD COLUMN target_score_time_ms INTEGER ' + 'CHECK (target_score_time_ms IS NULL OR target_score_time_ms > 0)', + ); + await customStatement( + 'ALTER TABLE workout_template_exercise_overrides ADD COLUMN ' + 'target_score_time_ms_override INTEGER CHECK ' + '(target_score_time_ms_override IS NULL OR ' + 'target_score_time_ms_override > 0)', + ); + await customStatement( + 'ALTER TABLE active_set_results ADD COLUMN actual_score_time_ms INTEGER ' + 'CHECK (actual_score_time_ms IS NULL OR actual_score_time_ms >= 0)', + ); + await customStatement( + 'ALTER TABLE active_set_results ADD COLUMN score_input_mode_snapshot ' + "TEXT NOT NULL DEFAULT 'manual' CHECK (score_input_mode_snapshot IN " + "('manual', 'stopwatch'))", + ); + await customStatement( + 'ALTER TABLE workout_history_set_results ADD COLUMN ' + 'score_input_mode_snapshot TEXT NOT NULL DEFAULT ' + "'manual' CHECK (score_input_mode_snapshot IN ('manual', 'stopwatch'))", + ); + await customStatement( + 'ALTER TABLE workout_history_set_results ADD COLUMN ' + 'target_score_time_ms_snapshot INTEGER CHECK ' + '(target_score_time_ms_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot > 0)', + ); + await customStatement( + 'ALTER TABLE workout_history_set_results ADD COLUMN ' + 'actual_score_time_ms INTEGER CHECK (actual_score_time_ms IS NULL OR ' + 'actual_score_time_ms >= 0)', + ); + await migrator.createTable(activeScoreStopwatchStates); + } +} diff --git a/lib/infrastructure/local/app_database.g.dart b/lib/infrastructure/local/app_database.g.dart index 3a1c0d5..6b01c63 100644 --- a/lib/infrastructure/local/app_database.g.dart +++ b/lib/infrastructure/local/app_database.g.dart @@ -3289,6 +3289,1130 @@ class ActiveRestStatesCompanion extends UpdateCompanion { } } +class $ActiveScoreStopwatchStatesTable extends ActiveScoreStopwatchStates + with + TableInfo<$ActiveScoreStopwatchStatesTable, ActiveScoreStopwatchState> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ActiveScoreStopwatchStatesTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _createdAtMeta = const VerificationMeta( + 'createdAt', + ); + @override + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _updatedAtMeta = const VerificationMeta( + 'updatedAt', + ); + @override + late final GeneratedColumn updatedAt = GeneratedColumn( + 'updated_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _deletedAtMeta = const VerificationMeta( + 'deletedAt', + ); + @override + late final GeneratedColumn deletedAt = GeneratedColumn( + 'deleted_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _schemaVersionMeta = const VerificationMeta( + 'schemaVersion', + ); + @override + late final GeneratedColumn schemaVersion = GeneratedColumn( + 'schema_version', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultValue: const Constant(1), + ); + static const VerificationMeta _syncStateMeta = const VerificationMeta( + 'syncState', + ); + @override + late final GeneratedColumn syncState = GeneratedColumn( + 'sync_state', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: + 'NOT NULL CHECK (sync_state IN (\'localOnly\', \'dirty\', \'synced\', \'deleted\'))', + ); + static const VerificationMeta _localRevisionMeta = const VerificationMeta( + 'localRevision', + ); + @override + late final GeneratedColumn localRevision = GeneratedColumn( + 'local_revision', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL CHECK (local_revision >= 0)', + ); + static const VerificationMeta _originDeviceIdMeta = const VerificationMeta( + 'originDeviceId', + ); + @override + late final GeneratedColumn originDeviceId = GeneratedColumn( + 'origin_device_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _futureOwnerProfileIdMeta = + const VerificationMeta('futureOwnerProfileId'); + @override + late final GeneratedColumn futureOwnerProfileId = + GeneratedColumn( + 'future_owner_profile_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _lastSyncedAtMeta = const VerificationMeta( + 'lastSyncedAt', + ); + @override + late final GeneratedColumn lastSyncedAt = GeneratedColumn( + 'last_synced_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _remoteRevisionMeta = const VerificationMeta( + 'remoteRevision', + ); + @override + late final GeneratedColumn remoteRevision = GeneratedColumn( + 'remote_revision', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _activeWorkoutSessionIdMeta = + const VerificationMeta('activeWorkoutSessionId'); + @override + late final GeneratedColumn activeWorkoutSessionId = + GeneratedColumn( + 'active_workout_session_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES active_workout_sessions (id)', + ), + ); + static const VerificationMeta _programIndexMeta = const VerificationMeta( + 'programIndex', + ); + @override + late final GeneratedColumn programIndex = GeneratedColumn( + 'program_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseIndexMeta = const VerificationMeta( + 'exerciseIndex', + ); + @override + late final GeneratedColumn exerciseIndex = GeneratedColumn( + 'exercise_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _setIndexMeta = const VerificationMeta( + 'setIndex', + ); + @override + late final GeneratedColumn setIndex = GeneratedColumn( + 'set_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _statusMeta = const VerificationMeta('status'); + @override + late final GeneratedColumn status = GeneratedColumn( + 'status', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _startedAtMeta = const VerificationMeta( + 'startedAt', + ); + @override + late final GeneratedColumn startedAt = GeneratedColumn( + 'started_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + static const VerificationMeta _accumulatedMsMeta = const VerificationMeta( + 'accumulatedMs', + ); + @override + late final GeneratedColumn accumulatedMs = GeneratedColumn( + 'accumulated_ms', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stoppedAtMeta = const VerificationMeta( + 'stoppedAt', + ); + @override + late final GeneratedColumn stoppedAt = GeneratedColumn( + 'stopped_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + status, + startedAt, + accumulatedMs, + stoppedAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'active_score_stopwatch_states'; + @override + VerificationContext validateIntegrity( + Insertable instance, { + bool isInserting = false, + }) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } else if (isInserting) { + context.missing(_idMeta); + } + if (data.containsKey('created_at')) { + context.handle( + _createdAtMeta, + createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta), + ); + } else if (isInserting) { + context.missing(_createdAtMeta); + } + if (data.containsKey('updated_at')) { + context.handle( + _updatedAtMeta, + updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), + ); + } else if (isInserting) { + context.missing(_updatedAtMeta); + } + if (data.containsKey('deleted_at')) { + context.handle( + _deletedAtMeta, + deletedAt.isAcceptableOrUnknown(data['deleted_at']!, _deletedAtMeta), + ); + } + if (data.containsKey('schema_version')) { + context.handle( + _schemaVersionMeta, + schemaVersion.isAcceptableOrUnknown( + data['schema_version']!, + _schemaVersionMeta, + ), + ); + } + if (data.containsKey('sync_state')) { + context.handle( + _syncStateMeta, + syncState.isAcceptableOrUnknown(data['sync_state']!, _syncStateMeta), + ); + } else if (isInserting) { + context.missing(_syncStateMeta); + } + if (data.containsKey('local_revision')) { + context.handle( + _localRevisionMeta, + localRevision.isAcceptableOrUnknown( + data['local_revision']!, + _localRevisionMeta, + ), + ); + } else if (isInserting) { + context.missing(_localRevisionMeta); + } + if (data.containsKey('origin_device_id')) { + context.handle( + _originDeviceIdMeta, + originDeviceId.isAcceptableOrUnknown( + data['origin_device_id']!, + _originDeviceIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_originDeviceIdMeta); + } + if (data.containsKey('future_owner_profile_id')) { + context.handle( + _futureOwnerProfileIdMeta, + futureOwnerProfileId.isAcceptableOrUnknown( + data['future_owner_profile_id']!, + _futureOwnerProfileIdMeta, + ), + ); + } + if (data.containsKey('last_synced_at')) { + context.handle( + _lastSyncedAtMeta, + lastSyncedAt.isAcceptableOrUnknown( + data['last_synced_at']!, + _lastSyncedAtMeta, + ), + ); + } + if (data.containsKey('remote_revision')) { + context.handle( + _remoteRevisionMeta, + remoteRevision.isAcceptableOrUnknown( + data['remote_revision']!, + _remoteRevisionMeta, + ), + ); + } + if (data.containsKey('active_workout_session_id')) { + context.handle( + _activeWorkoutSessionIdMeta, + activeWorkoutSessionId.isAcceptableOrUnknown( + data['active_workout_session_id']!, + _activeWorkoutSessionIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_activeWorkoutSessionIdMeta); + } + if (data.containsKey('program_index')) { + context.handle( + _programIndexMeta, + programIndex.isAcceptableOrUnknown( + data['program_index']!, + _programIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_programIndexMeta); + } + if (data.containsKey('exercise_index')) { + context.handle( + _exerciseIndexMeta, + exerciseIndex.isAcceptableOrUnknown( + data['exercise_index']!, + _exerciseIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseIndexMeta); + } + if (data.containsKey('set_index')) { + context.handle( + _setIndexMeta, + setIndex.isAcceptableOrUnknown(data['set_index']!, _setIndexMeta), + ); + } else if (isInserting) { + context.missing(_setIndexMeta); + } + if (data.containsKey('status')) { + context.handle( + _statusMeta, + status.isAcceptableOrUnknown(data['status']!, _statusMeta), + ); + } else if (isInserting) { + context.missing(_statusMeta); + } + if (data.containsKey('started_at')) { + context.handle( + _startedAtMeta, + startedAt.isAcceptableOrUnknown(data['started_at']!, _startedAtMeta), + ); + } else if (isInserting) { + context.missing(_startedAtMeta); + } + if (data.containsKey('accumulated_ms')) { + context.handle( + _accumulatedMsMeta, + accumulatedMs.isAcceptableOrUnknown( + data['accumulated_ms']!, + _accumulatedMsMeta, + ), + ); + } else if (isInserting) { + context.missing(_accumulatedMsMeta); + } + if (data.containsKey('stopped_at')) { + context.handle( + _stoppedAtMeta, + stoppedAt.isAcceptableOrUnknown(data['stopped_at']!, _stoppedAtMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ActiveScoreStopwatchState map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActiveScoreStopwatchState( + id: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + createdAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}created_at'], + )!, + updatedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}updated_at'], + )!, + deletedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}deleted_at'], + ), + schemaVersion: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}schema_version'], + )!, + syncState: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sync_state'], + )!, + localRevision: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}local_revision'], + )!, + originDeviceId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}origin_device_id'], + )!, + futureOwnerProfileId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}future_owner_profile_id'], + ), + lastSyncedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_synced_at'], + ), + remoteRevision: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}remote_revision'], + ), + activeWorkoutSessionId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}active_workout_session_id'], + )!, + programIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}program_index'], + )!, + exerciseIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}exercise_index'], + )!, + setIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}set_index'], + )!, + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + )!, + accumulatedMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}accumulated_ms'], + )!, + stoppedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}stopped_at'], + ), + ); + } + + @override + $ActiveScoreStopwatchStatesTable createAlias(String alias) { + return $ActiveScoreStopwatchStatesTable(attachedDatabase, alias); + } +} + +class ActiveScoreStopwatchState extends DataClass + implements Insertable { + final String id; + final DateTime createdAt; + final DateTime updatedAt; + final DateTime? deletedAt; + final int schemaVersion; + final String syncState; + final int localRevision; + final String originDeviceId; + final String? futureOwnerProfileId; + final DateTime? lastSyncedAt; + final String? remoteRevision; + final String activeWorkoutSessionId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final String status; + final DateTime startedAt; + final int accumulatedMs; + final DateTime? stoppedAt; + const ActiveScoreStopwatchState({ + required this.id, + required this.createdAt, + required this.updatedAt, + this.deletedAt, + required this.schemaVersion, + required this.syncState, + required this.localRevision, + required this.originDeviceId, + this.futureOwnerProfileId, + this.lastSyncedAt, + this.remoteRevision, + required this.activeWorkoutSessionId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.status, + required this.startedAt, + required this.accumulatedMs, + this.stoppedAt, + }); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['created_at'] = Variable(createdAt); + map['updated_at'] = Variable(updatedAt); + if (!nullToAbsent || deletedAt != null) { + map['deleted_at'] = Variable(deletedAt); + } + map['schema_version'] = Variable(schemaVersion); + map['sync_state'] = Variable(syncState); + map['local_revision'] = Variable(localRevision); + map['origin_device_id'] = Variable(originDeviceId); + if (!nullToAbsent || futureOwnerProfileId != null) { + map['future_owner_profile_id'] = Variable(futureOwnerProfileId); + } + if (!nullToAbsent || lastSyncedAt != null) { + map['last_synced_at'] = Variable(lastSyncedAt); + } + if (!nullToAbsent || remoteRevision != null) { + map['remote_revision'] = Variable(remoteRevision); + } + map['active_workout_session_id'] = Variable(activeWorkoutSessionId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['status'] = Variable(status); + map['started_at'] = Variable(startedAt); + map['accumulated_ms'] = Variable(accumulatedMs); + if (!nullToAbsent || stoppedAt != null) { + map['stopped_at'] = Variable(stoppedAt); + } + return map; + } + + ActiveScoreStopwatchStatesCompanion toCompanion(bool nullToAbsent) { + return ActiveScoreStopwatchStatesCompanion( + id: Value(id), + createdAt: Value(createdAt), + updatedAt: Value(updatedAt), + deletedAt: deletedAt == null && nullToAbsent + ? const Value.absent() + : Value(deletedAt), + schemaVersion: Value(schemaVersion), + syncState: Value(syncState), + localRevision: Value(localRevision), + originDeviceId: Value(originDeviceId), + futureOwnerProfileId: futureOwnerProfileId == null && nullToAbsent + ? const Value.absent() + : Value(futureOwnerProfileId), + lastSyncedAt: lastSyncedAt == null && nullToAbsent + ? const Value.absent() + : Value(lastSyncedAt), + remoteRevision: remoteRevision == null && nullToAbsent + ? const Value.absent() + : Value(remoteRevision), + activeWorkoutSessionId: Value(activeWorkoutSessionId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + status: Value(status), + startedAt: Value(startedAt), + accumulatedMs: Value(accumulatedMs), + stoppedAt: stoppedAt == null && nullToAbsent + ? const Value.absent() + : Value(stoppedAt), + ); + } + + factory ActiveScoreStopwatchState.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActiveScoreStopwatchState( + id: serializer.fromJson(json['id']), + createdAt: serializer.fromJson(json['createdAt']), + updatedAt: serializer.fromJson(json['updatedAt']), + deletedAt: serializer.fromJson(json['deletedAt']), + schemaVersion: serializer.fromJson(json['schemaVersion']), + syncState: serializer.fromJson(json['syncState']), + localRevision: serializer.fromJson(json['localRevision']), + originDeviceId: serializer.fromJson(json['originDeviceId']), + futureOwnerProfileId: serializer.fromJson( + json['futureOwnerProfileId'], + ), + lastSyncedAt: serializer.fromJson(json['lastSyncedAt']), + remoteRevision: serializer.fromJson(json['remoteRevision']), + activeWorkoutSessionId: serializer.fromJson( + json['activeWorkoutSessionId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + accumulatedMs: serializer.fromJson(json['accumulatedMs']), + stoppedAt: serializer.fromJson(json['stoppedAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'createdAt': serializer.toJson(createdAt), + 'updatedAt': serializer.toJson(updatedAt), + 'deletedAt': serializer.toJson(deletedAt), + 'schemaVersion': serializer.toJson(schemaVersion), + 'syncState': serializer.toJson(syncState), + 'localRevision': serializer.toJson(localRevision), + 'originDeviceId': serializer.toJson(originDeviceId), + 'futureOwnerProfileId': serializer.toJson(futureOwnerProfileId), + 'lastSyncedAt': serializer.toJson(lastSyncedAt), + 'remoteRevision': serializer.toJson(remoteRevision), + 'activeWorkoutSessionId': serializer.toJson( + activeWorkoutSessionId, + ), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'accumulatedMs': serializer.toJson(accumulatedMs), + 'stoppedAt': serializer.toJson(stoppedAt), + }; + } + + ActiveScoreStopwatchState copyWith({ + String? id, + DateTime? createdAt, + DateTime? updatedAt, + Value deletedAt = const Value.absent(), + int? schemaVersion, + String? syncState, + int? localRevision, + String? originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + String? activeWorkoutSessionId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + String? status, + DateTime? startedAt, + int? accumulatedMs, + Value stoppedAt = const Value.absent(), + }) => ActiveScoreStopwatchState( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt.present ? deletedAt.value : this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId.present + ? futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt.present ? lastSyncedAt.value : this.lastSyncedAt, + remoteRevision: remoteRevision.present + ? remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + stoppedAt: stoppedAt.present ? stoppedAt.value : this.stoppedAt, + ); + ActiveScoreStopwatchState copyWithCompanion( + ActiveScoreStopwatchStatesCompanion data, + ) { + return ActiveScoreStopwatchState( + id: data.id.present ? data.id.value : this.id, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, + deletedAt: data.deletedAt.present ? data.deletedAt.value : this.deletedAt, + schemaVersion: data.schemaVersion.present + ? data.schemaVersion.value + : this.schemaVersion, + syncState: data.syncState.present ? data.syncState.value : this.syncState, + localRevision: data.localRevision.present + ? data.localRevision.value + : this.localRevision, + originDeviceId: data.originDeviceId.present + ? data.originDeviceId.value + : this.originDeviceId, + futureOwnerProfileId: data.futureOwnerProfileId.present + ? data.futureOwnerProfileId.value + : this.futureOwnerProfileId, + lastSyncedAt: data.lastSyncedAt.present + ? data.lastSyncedAt.value + : this.lastSyncedAt, + remoteRevision: data.remoteRevision.present + ? data.remoteRevision.value + : this.remoteRevision, + activeWorkoutSessionId: data.activeWorkoutSessionId.present + ? data.activeWorkoutSessionId.value + : this.activeWorkoutSessionId, + programIndex: data.programIndex.present + ? data.programIndex.value + : this.programIndex, + exerciseIndex: data.exerciseIndex.present + ? data.exerciseIndex.value + : this.exerciseIndex, + setIndex: data.setIndex.present ? data.setIndex.value : this.setIndex, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + accumulatedMs: data.accumulatedMs.present + ? data.accumulatedMs.value + : this.accumulatedMs, + stoppedAt: data.stoppedAt.present ? data.stoppedAt.value : this.stoppedAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActiveScoreStopwatchState(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('stoppedAt: $stoppedAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + status, + startedAt, + accumulatedMs, + stoppedAt, + ); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActiveScoreStopwatchState && + other.id == this.id && + other.createdAt == this.createdAt && + other.updatedAt == this.updatedAt && + other.deletedAt == this.deletedAt && + other.schemaVersion == this.schemaVersion && + other.syncState == this.syncState && + other.localRevision == this.localRevision && + other.originDeviceId == this.originDeviceId && + other.futureOwnerProfileId == this.futureOwnerProfileId && + other.lastSyncedAt == this.lastSyncedAt && + other.remoteRevision == this.remoteRevision && + other.activeWorkoutSessionId == this.activeWorkoutSessionId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.status == this.status && + other.startedAt == this.startedAt && + other.accumulatedMs == this.accumulatedMs && + other.stoppedAt == this.stoppedAt); +} + +class ActiveScoreStopwatchStatesCompanion + extends UpdateCompanion { + final Value id; + final Value createdAt; + final Value updatedAt; + final Value deletedAt; + final Value schemaVersion; + final Value syncState; + final Value localRevision; + final Value originDeviceId; + final Value futureOwnerProfileId; + final Value lastSyncedAt; + final Value remoteRevision; + final Value activeWorkoutSessionId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value status; + final Value startedAt; + final Value accumulatedMs; + final Value stoppedAt; + final Value rowid; + const ActiveScoreStopwatchStatesCompanion({ + this.id = const Value.absent(), + this.createdAt = const Value.absent(), + this.updatedAt = const Value.absent(), + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + this.syncState = const Value.absent(), + this.localRevision = const Value.absent(), + this.originDeviceId = const Value.absent(), + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + this.activeWorkoutSessionId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.accumulatedMs = const Value.absent(), + this.stoppedAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ActiveScoreStopwatchStatesCompanion.insert({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + this.deletedAt = const Value.absent(), + this.schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + this.futureOwnerProfileId = const Value.absent(), + this.lastSyncedAt = const Value.absent(), + this.remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required String status, + required DateTime startedAt, + required int accumulatedMs, + this.stoppedAt = const Value.absent(), + this.rowid = const Value.absent(), + }) : id = Value(id), + createdAt = Value(createdAt), + updatedAt = Value(updatedAt), + syncState = Value(syncState), + localRevision = Value(localRevision), + originDeviceId = Value(originDeviceId), + activeWorkoutSessionId = Value(activeWorkoutSessionId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + status = Value(status), + startedAt = Value(startedAt), + accumulatedMs = Value(accumulatedMs); + static Insertable custom({ + Expression? id, + Expression? createdAt, + Expression? updatedAt, + Expression? deletedAt, + Expression? schemaVersion, + Expression? syncState, + Expression? localRevision, + Expression? originDeviceId, + Expression? futureOwnerProfileId, + Expression? lastSyncedAt, + Expression? remoteRevision, + Expression? activeWorkoutSessionId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? status, + Expression? startedAt, + Expression? accumulatedMs, + Expression? stoppedAt, + Expression? rowid, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (createdAt != null) 'created_at': createdAt, + if (updatedAt != null) 'updated_at': updatedAt, + if (deletedAt != null) 'deleted_at': deletedAt, + if (schemaVersion != null) 'schema_version': schemaVersion, + if (syncState != null) 'sync_state': syncState, + if (localRevision != null) 'local_revision': localRevision, + if (originDeviceId != null) 'origin_device_id': originDeviceId, + if (futureOwnerProfileId != null) + 'future_owner_profile_id': futureOwnerProfileId, + if (lastSyncedAt != null) 'last_synced_at': lastSyncedAt, + if (remoteRevision != null) 'remote_revision': remoteRevision, + if (activeWorkoutSessionId != null) + 'active_workout_session_id': activeWorkoutSessionId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (accumulatedMs != null) 'accumulated_ms': accumulatedMs, + if (stoppedAt != null) 'stopped_at': stoppedAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ActiveScoreStopwatchStatesCompanion copyWith({ + Value? id, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? schemaVersion, + Value? syncState, + Value? localRevision, + Value? originDeviceId, + Value? futureOwnerProfileId, + Value? lastSyncedAt, + Value? remoteRevision, + Value? activeWorkoutSessionId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? status, + Value? startedAt, + Value? accumulatedMs, + Value? stoppedAt, + Value? rowid, + }) { + return ActiveScoreStopwatchStatesCompanion( + id: id ?? this.id, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + deletedAt: deletedAt ?? this.deletedAt, + schemaVersion: schemaVersion ?? this.schemaVersion, + syncState: syncState ?? this.syncState, + localRevision: localRevision ?? this.localRevision, + originDeviceId: originDeviceId ?? this.originDeviceId, + futureOwnerProfileId: futureOwnerProfileId ?? this.futureOwnerProfileId, + lastSyncedAt: lastSyncedAt ?? this.lastSyncedAt, + remoteRevision: remoteRevision ?? this.remoteRevision, + activeWorkoutSessionId: + activeWorkoutSessionId ?? this.activeWorkoutSessionId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + stoppedAt: stoppedAt ?? this.stoppedAt, + rowid: rowid ?? this.rowid, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + if (updatedAt.present) { + map['updated_at'] = Variable(updatedAt.value); + } + if (deletedAt.present) { + map['deleted_at'] = Variable(deletedAt.value); + } + if (schemaVersion.present) { + map['schema_version'] = Variable(schemaVersion.value); + } + if (syncState.present) { + map['sync_state'] = Variable(syncState.value); + } + if (localRevision.present) { + map['local_revision'] = Variable(localRevision.value); + } + if (originDeviceId.present) { + map['origin_device_id'] = Variable(originDeviceId.value); + } + if (futureOwnerProfileId.present) { + map['future_owner_profile_id'] = Variable( + futureOwnerProfileId.value, + ); + } + if (lastSyncedAt.present) { + map['last_synced_at'] = Variable(lastSyncedAt.value); + } + if (remoteRevision.present) { + map['remote_revision'] = Variable(remoteRevision.value); + } + if (activeWorkoutSessionId.present) { + map['active_workout_session_id'] = Variable( + activeWorkoutSessionId.value, + ); + } + if (programIndex.present) { + map['program_index'] = Variable(programIndex.value); + } + if (exerciseIndex.present) { + map['exercise_index'] = Variable(exerciseIndex.value); + } + if (setIndex.present) { + map['set_index'] = Variable(setIndex.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (accumulatedMs.present) { + map['accumulated_ms'] = Variable(accumulatedMs.value); + } + if (stoppedAt.present) { + map['stopped_at'] = Variable(stoppedAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActiveScoreStopwatchStatesCompanion(') + ..write('id: $id, ') + ..write('createdAt: $createdAt, ') + ..write('updatedAt: $updatedAt, ') + ..write('deletedAt: $deletedAt, ') + ..write('schemaVersion: $schemaVersion, ') + ..write('syncState: $syncState, ') + ..write('localRevision: $localRevision, ') + ..write('originDeviceId: $originDeviceId, ') + ..write('futureOwnerProfileId: $futureOwnerProfileId, ') + ..write('lastSyncedAt: $lastSyncedAt, ') + ..write('remoteRevision: $remoteRevision, ') + ..write('activeWorkoutSessionId: $activeWorkoutSessionId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('stoppedAt: $stoppedAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $ActiveSetResultsTable extends ActiveSetResults with TableInfo<$ActiveSetResultsTable, ActiveSetResult> { @override @@ -3546,6 +4670,29 @@ class $ActiveSetResultsTable extends ActiveSetResults type: DriftSqlType.double, requiredDuringInsert: false, ); + static const VerificationMeta _actualScoreTimeMsMeta = const VerificationMeta( + 'actualScoreTimeMs', + ); + @override + late final GeneratedColumn actualScoreTimeMs = GeneratedColumn( + 'actual_score_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('manual'), + ); static const VerificationMeta _scoreLabelSnapshotMeta = const VerificationMeta('scoreLabelSnapshot'); @override @@ -3612,6 +4759,8 @@ class $ActiveSetResultsTable extends ActiveSetResults actualTimeMs, actualReps, actualScore, + actualScoreTimeMs, + scoreInputModeSnapshot, scoreLabelSnapshot, scoreUnitSnapshot, note, @@ -3824,6 +4973,24 @@ class $ActiveSetResultsTable extends ActiveSetResults ), ); } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } + if (data.containsKey('score_input_mode_snapshot')) { + context.handle( + _scoreInputModeSnapshotMeta, + scoreInputModeSnapshot.isAcceptableOrUnknown( + data['score_input_mode_snapshot']!, + _scoreInputModeSnapshotMeta, + ), + ); + } if (data.containsKey('score_label_snapshot')) { context.handle( _scoreLabelSnapshotMeta, @@ -3951,6 +5118,14 @@ class $ActiveSetResultsTable extends ActiveSetResults DriftSqlType.double, data['${effectivePrefix}actual_score'], ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), + scoreInputModeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode_snapshot'], + )!, scoreLabelSnapshot: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}score_label_snapshot'], @@ -3999,6 +5174,8 @@ class ActiveSetResult extends DataClass implements Insertable { final int? actualTimeMs; final int? actualReps; final double? actualScore; + final int? actualScoreTimeMs; + final String scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final String? note; @@ -4026,6 +5203,8 @@ class ActiveSetResult extends DataClass implements Insertable { this.actualTimeMs, this.actualReps, this.actualScore, + this.actualScoreTimeMs, + required this.scoreInputModeSnapshot, this.scoreLabelSnapshot, this.scoreUnitSnapshot, this.note, @@ -4074,6 +5253,10 @@ class ActiveSetResult extends DataClass implements Insertable { if (!nullToAbsent || actualScore != null) { map['actual_score'] = Variable(actualScore); } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } + map['score_input_mode_snapshot'] = Variable(scoreInputModeSnapshot); if (!nullToAbsent || scoreLabelSnapshot != null) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot); } @@ -4129,6 +5312,10 @@ class ActiveSetResult extends DataClass implements Insertable { actualScore: actualScore == null && nullToAbsent ? const Value.absent() : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), + scoreInputModeSnapshot: Value(scoreInputModeSnapshot), scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent ? const Value.absent() : Value(scoreLabelSnapshot), @@ -4174,6 +5361,10 @@ class ActiveSetResult extends DataClass implements Insertable { actualTimeMs: serializer.fromJson(json['actualTimeMs']), actualReps: serializer.fromJson(json['actualReps']), actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), scoreLabelSnapshot: serializer.fromJson( json['scoreLabelSnapshot'], ), @@ -4212,6 +5403,10 @@ class ActiveSetResult extends DataClass implements Insertable { 'actualTimeMs': serializer.toJson(actualTimeMs), 'actualReps': serializer.toJson(actualReps), 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), 'note': serializer.toJson(note), @@ -4242,6 +5437,8 @@ class ActiveSetResult extends DataClass implements Insertable { Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + String? scoreInputModeSnapshot, Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value note = const Value.absent(), @@ -4274,6 +5471,11 @@ class ActiveSetResult extends DataClass implements Insertable { actualTimeMs: actualTimeMs.present ? actualTimeMs.value : this.actualTimeMs, actualReps: actualReps.present ? actualReps.value : this.actualReps, actualScore: actualScore.present ? actualScore.value : this.actualScore, + actualScoreTimeMs: actualScoreTimeMs.present + ? actualScoreTimeMs.value + : this.actualScoreTimeMs, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot.present ? scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -4337,6 +5539,12 @@ class ActiveSetResult extends DataClass implements Insertable { actualScore: data.actualScore.present ? data.actualScore.value : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, scoreLabelSnapshot: data.scoreLabelSnapshot.present ? data.scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -4373,6 +5581,8 @@ class ActiveSetResult extends DataClass implements Insertable { ..write('actualTimeMs: $actualTimeMs, ') ..write('actualReps: $actualReps, ') ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('note: $note, ') @@ -4405,6 +5615,8 @@ class ActiveSetResult extends DataClass implements Insertable { actualTimeMs, actualReps, actualScore, + actualScoreTimeMs, + scoreInputModeSnapshot, scoreLabelSnapshot, scoreUnitSnapshot, note, @@ -4436,6 +5648,8 @@ class ActiveSetResult extends DataClass implements Insertable { other.actualTimeMs == this.actualTimeMs && other.actualReps == this.actualReps && other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && other.scoreLabelSnapshot == this.scoreLabelSnapshot && other.scoreUnitSnapshot == this.scoreUnitSnapshot && other.note == this.note && @@ -4465,6 +5679,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { final Value actualTimeMs; final Value actualReps; final Value actualScore; + final Value actualScoreTimeMs; + final Value scoreInputModeSnapshot; final Value scoreLabelSnapshot; final Value scoreUnitSnapshot; final Value note; @@ -4493,6 +5709,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { this.actualTimeMs = const Value.absent(), this.actualReps = const Value.absent(), this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), this.note = const Value.absent(), @@ -4522,6 +5740,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { this.actualTimeMs = const Value.absent(), this.actualReps = const Value.absent(), this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), this.note = const Value.absent(), @@ -4562,6 +5782,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { Expression? actualTimeMs, Expression? actualReps, Expression? actualScore, + Expression? actualScoreTimeMs, + Expression? scoreInputModeSnapshot, Expression? scoreLabelSnapshot, Expression? scoreUnitSnapshot, Expression? note, @@ -4594,6 +5816,9 @@ class ActiveSetResultsCompanion extends UpdateCompanion { if (actualTimeMs != null) 'actual_time_ms': actualTimeMs, if (actualReps != null) 'actual_reps': actualReps, if (actualScore != null) 'actual_score': actualScore, + if (actualScoreTimeMs != null) 'actual_score_time_ms': actualScoreTimeMs, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, if (scoreLabelSnapshot != null) 'score_label_snapshot': scoreLabelSnapshot, if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, @@ -4626,6 +5851,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { Value? actualTimeMs, Value? actualReps, Value? actualScore, + Value? actualScoreTimeMs, + Value? scoreInputModeSnapshot, Value? scoreLabelSnapshot, Value? scoreUnitSnapshot, Value? note, @@ -4656,6 +5883,9 @@ class ActiveSetResultsCompanion extends UpdateCompanion { actualTimeMs: actualTimeMs ?? this.actualTimeMs, actualReps: actualReps ?? this.actualReps, actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, note: note ?? this.note, @@ -4737,6 +5967,14 @@ class ActiveSetResultsCompanion extends UpdateCompanion { if (actualScore.present) { map['actual_score'] = Variable(actualScore.value); } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } if (scoreLabelSnapshot.present) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); } @@ -4780,6 +6018,8 @@ class ActiveSetResultsCompanion extends UpdateCompanion { ..write('actualTimeMs: $actualTimeMs, ') ..write('actualReps: $actualReps, ') ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('note: $note, ') @@ -6789,6 +8029,18 @@ class $ExercisesTable extends Exercises 'CHECK ("has_score_measure" IN (0, 1))', ), ); + static const VerificationMeta _scoreInputModeMeta = const VerificationMeta( + 'scoreInputMode', + ); + @override + late final GeneratedColumn scoreInputMode = GeneratedColumn( + 'score_input_mode', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('manual'), + ); static const VerificationMeta _scoreLabelMeta = const VerificationMeta( 'scoreLabel', ); @@ -6842,6 +8094,7 @@ class $ExercisesTable extends Exercises hasTimeMeasure, hasRepsMeasure, hasScoreMeasure, + scoreInputMode, scoreLabel, scoreUnit, archivedAt, @@ -7019,6 +8272,15 @@ class $ExercisesTable extends Exercises } else if (isInserting) { context.missing(_hasScoreMeasureMeta); } + if (data.containsKey('score_input_mode')) { + context.handle( + _scoreInputModeMeta, + scoreInputMode.isAcceptableOrUnknown( + data['score_input_mode']!, + _scoreInputModeMeta, + ), + ); + } if (data.containsKey('score_label')) { context.handle( _scoreLabelMeta, @@ -7118,6 +8380,10 @@ class $ExercisesTable extends Exercises DriftSqlType.bool, data['${effectivePrefix}has_score_measure'], )!, + scoreInputMode: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode'], + )!, scoreLabel: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}score_label'], @@ -7158,6 +8424,7 @@ class Exercise extends DataClass implements Insertable { final bool hasTimeMeasure; final bool hasRepsMeasure; final bool hasScoreMeasure; + final String scoreInputMode; final String? scoreLabel; final String? scoreUnit; final DateTime? archivedAt; @@ -7180,6 +8447,7 @@ class Exercise extends DataClass implements Insertable { required this.hasTimeMeasure, required this.hasRepsMeasure, required this.hasScoreMeasure, + required this.scoreInputMode, this.scoreLabel, this.scoreUnit, this.archivedAt, @@ -7219,6 +8487,7 @@ class Exercise extends DataClass implements Insertable { map['has_time_measure'] = Variable(hasTimeMeasure); map['has_reps_measure'] = Variable(hasRepsMeasure); map['has_score_measure'] = Variable(hasScoreMeasure); + map['score_input_mode'] = Variable(scoreInputMode); if (!nullToAbsent || scoreLabel != null) { map['score_label'] = Variable(scoreLabel); } @@ -7265,6 +8534,7 @@ class Exercise extends DataClass implements Insertable { hasTimeMeasure: Value(hasTimeMeasure), hasRepsMeasure: Value(hasRepsMeasure), hasScoreMeasure: Value(hasScoreMeasure), + scoreInputMode: Value(scoreInputMode), scoreLabel: scoreLabel == null && nullToAbsent ? const Value.absent() : Value(scoreLabel), @@ -7303,6 +8573,7 @@ class Exercise extends DataClass implements Insertable { hasTimeMeasure: serializer.fromJson(json['hasTimeMeasure']), hasRepsMeasure: serializer.fromJson(json['hasRepsMeasure']), hasScoreMeasure: serializer.fromJson(json['hasScoreMeasure']), + scoreInputMode: serializer.fromJson(json['scoreInputMode']), scoreLabel: serializer.fromJson(json['scoreLabel']), scoreUnit: serializer.fromJson(json['scoreUnit']), archivedAt: serializer.fromJson(json['archivedAt']), @@ -7330,6 +8601,7 @@ class Exercise extends DataClass implements Insertable { 'hasTimeMeasure': serializer.toJson(hasTimeMeasure), 'hasRepsMeasure': serializer.toJson(hasRepsMeasure), 'hasScoreMeasure': serializer.toJson(hasScoreMeasure), + 'scoreInputMode': serializer.toJson(scoreInputMode), 'scoreLabel': serializer.toJson(scoreLabel), 'scoreUnit': serializer.toJson(scoreUnit), 'archivedAt': serializer.toJson(archivedAt), @@ -7355,6 +8627,7 @@ class Exercise extends DataClass implements Insertable { bool? hasTimeMeasure, bool? hasRepsMeasure, bool? hasScoreMeasure, + String? scoreInputMode, Value scoreLabel = const Value.absent(), Value scoreUnit = const Value.absent(), Value archivedAt = const Value.absent(), @@ -7381,6 +8654,7 @@ class Exercise extends DataClass implements Insertable { hasTimeMeasure: hasTimeMeasure ?? this.hasTimeMeasure, hasRepsMeasure: hasRepsMeasure ?? this.hasRepsMeasure, hasScoreMeasure: hasScoreMeasure ?? this.hasScoreMeasure, + scoreInputMode: scoreInputMode ?? this.scoreInputMode, scoreLabel: scoreLabel.present ? scoreLabel.value : this.scoreLabel, scoreUnit: scoreUnit.present ? scoreUnit.value : this.scoreUnit, archivedAt: archivedAt.present ? archivedAt.value : this.archivedAt, @@ -7429,6 +8703,9 @@ class Exercise extends DataClass implements Insertable { hasScoreMeasure: data.hasScoreMeasure.present ? data.hasScoreMeasure.value : this.hasScoreMeasure, + scoreInputMode: data.scoreInputMode.present + ? data.scoreInputMode.value + : this.scoreInputMode, scoreLabel: data.scoreLabel.present ? data.scoreLabel.value : this.scoreLabel, @@ -7460,6 +8737,7 @@ class Exercise extends DataClass implements Insertable { ..write('hasTimeMeasure: $hasTimeMeasure, ') ..write('hasRepsMeasure: $hasRepsMeasure, ') ..write('hasScoreMeasure: $hasScoreMeasure, ') + ..write('scoreInputMode: $scoreInputMode, ') ..write('scoreLabel: $scoreLabel, ') ..write('scoreUnit: $scoreUnit, ') ..write('archivedAt: $archivedAt') @@ -7487,6 +8765,7 @@ class Exercise extends DataClass implements Insertable { hasTimeMeasure, hasRepsMeasure, hasScoreMeasure, + scoreInputMode, scoreLabel, scoreUnit, archivedAt, @@ -7513,6 +8792,7 @@ class Exercise extends DataClass implements Insertable { other.hasTimeMeasure == this.hasTimeMeasure && other.hasRepsMeasure == this.hasRepsMeasure && other.hasScoreMeasure == this.hasScoreMeasure && + other.scoreInputMode == this.scoreInputMode && other.scoreLabel == this.scoreLabel && other.scoreUnit == this.scoreUnit && other.archivedAt == this.archivedAt); @@ -7537,6 +8817,7 @@ class ExercisesCompanion extends UpdateCompanion { final Value hasTimeMeasure; final Value hasRepsMeasure; final Value hasScoreMeasure; + final Value scoreInputMode; final Value scoreLabel; final Value scoreUnit; final Value archivedAt; @@ -7560,6 +8841,7 @@ class ExercisesCompanion extends UpdateCompanion { this.hasTimeMeasure = const Value.absent(), this.hasRepsMeasure = const Value.absent(), this.hasScoreMeasure = const Value.absent(), + this.scoreInputMode = const Value.absent(), this.scoreLabel = const Value.absent(), this.scoreUnit = const Value.absent(), this.archivedAt = const Value.absent(), @@ -7584,6 +8866,7 @@ class ExercisesCompanion extends UpdateCompanion { required bool hasTimeMeasure, required bool hasRepsMeasure, required bool hasScoreMeasure, + this.scoreInputMode = const Value.absent(), this.scoreLabel = const Value.absent(), this.scoreUnit = const Value.absent(), this.archivedAt = const Value.absent(), @@ -7617,6 +8900,7 @@ class ExercisesCompanion extends UpdateCompanion { Expression? hasTimeMeasure, Expression? hasRepsMeasure, Expression? hasScoreMeasure, + Expression? scoreInputMode, Expression? scoreLabel, Expression? scoreUnit, Expression? archivedAt, @@ -7642,6 +8926,7 @@ class ExercisesCompanion extends UpdateCompanion { if (hasTimeMeasure != null) 'has_time_measure': hasTimeMeasure, if (hasRepsMeasure != null) 'has_reps_measure': hasRepsMeasure, if (hasScoreMeasure != null) 'has_score_measure': hasScoreMeasure, + if (scoreInputMode != null) 'score_input_mode': scoreInputMode, if (scoreLabel != null) 'score_label': scoreLabel, if (scoreUnit != null) 'score_unit': scoreUnit, if (archivedAt != null) 'archived_at': archivedAt, @@ -7668,6 +8953,7 @@ class ExercisesCompanion extends UpdateCompanion { Value? hasTimeMeasure, Value? hasRepsMeasure, Value? hasScoreMeasure, + Value? scoreInputMode, Value? scoreLabel, Value? scoreUnit, Value? archivedAt, @@ -7692,6 +8978,7 @@ class ExercisesCompanion extends UpdateCompanion { hasTimeMeasure: hasTimeMeasure ?? this.hasTimeMeasure, hasRepsMeasure: hasRepsMeasure ?? this.hasRepsMeasure, hasScoreMeasure: hasScoreMeasure ?? this.hasScoreMeasure, + scoreInputMode: scoreInputMode ?? this.scoreInputMode, scoreLabel: scoreLabel ?? this.scoreLabel, scoreUnit: scoreUnit ?? this.scoreUnit, archivedAt: archivedAt ?? this.archivedAt, @@ -7758,6 +9045,9 @@ class ExercisesCompanion extends UpdateCompanion { if (hasScoreMeasure.present) { map['has_score_measure'] = Variable(hasScoreMeasure.value); } + if (scoreInputMode.present) { + map['score_input_mode'] = Variable(scoreInputMode.value); + } if (scoreLabel.present) { map['score_label'] = Variable(scoreLabel.value); } @@ -7794,6 +9084,7 @@ class ExercisesCompanion extends UpdateCompanion { ..write('hasTimeMeasure: $hasTimeMeasure, ') ..write('hasRepsMeasure: $hasRepsMeasure, ') ..write('hasScoreMeasure: $hasScoreMeasure, ') + ..write('scoreInputMode: $scoreInputMode, ') ..write('scoreLabel: $scoreLabel, ') ..write('scoreUnit: $scoreUnit, ') ..write('archivedAt: $archivedAt, ') @@ -8880,6 +10171,18 @@ class $ProgramExercisesTable extends ProgramExercises 'CHECK ("available_score_snapshot" IN (0, 1))', ), ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('manual'), + ); static const VerificationMeta _scoreLabelSnapshotMeta = const VerificationMeta('scoreLabelSnapshot'); @override @@ -8989,6 +10292,17 @@ class $ProgramExercisesTable extends ProgramExercises type: DriftSqlType.double, requiredDuringInsert: false, ); + static const VerificationMeta _targetScoreTimeMsMeta = const VerificationMeta( + 'targetScoreTimeMs', + ); + @override + late final GeneratedColumn targetScoreTimeMs = GeneratedColumn( + 'target_score_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); static const VerificationMeta _restSecondsOverrideMeta = const VerificationMeta('restSecondsOverride'); @override @@ -9023,6 +10337,7 @@ class $ProgramExercisesTable extends ProgramExercises availableTimeSnapshot, availableRepsSnapshot, availableScoreSnapshot, + scoreInputModeSnapshot, scoreLabelSnapshot, scoreUnitSnapshot, setsCount, @@ -9032,6 +10347,7 @@ class $ProgramExercisesTable extends ProgramExercises targetTimeSeconds, targetReps, targetScore, + targetScoreTimeMs, restSecondsOverride, ]; @override @@ -9244,6 +10560,15 @@ class $ProgramExercisesTable extends ProgramExercises } else if (isInserting) { context.missing(_availableScoreSnapshotMeta); } + if (data.containsKey('score_input_mode_snapshot')) { + context.handle( + _scoreInputModeSnapshotMeta, + scoreInputModeSnapshot.isAcceptableOrUnknown( + data['score_input_mode_snapshot']!, + _scoreInputModeSnapshotMeta, + ), + ); + } if (data.containsKey('score_label_snapshot')) { context.handle( _scoreLabelSnapshotMeta, @@ -9327,6 +10652,15 @@ class $ProgramExercisesTable extends ProgramExercises ), ); } + if (data.containsKey('target_score_time_ms')) { + context.handle( + _targetScoreTimeMsMeta, + targetScoreTimeMs.isAcceptableOrUnknown( + data['target_score_time_ms']!, + _targetScoreTimeMsMeta, + ), + ); + } if (data.containsKey('rest_seconds_override')) { context.handle( _restSecondsOverrideMeta, @@ -9433,6 +10767,10 @@ class $ProgramExercisesTable extends ProgramExercises DriftSqlType.bool, data['${effectivePrefix}available_score_snapshot'], )!, + scoreInputModeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode_snapshot'], + )!, scoreLabelSnapshot: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}score_label_snapshot'], @@ -9469,6 +10807,10 @@ class $ProgramExercisesTable extends ProgramExercises DriftSqlType.double, data['${effectivePrefix}target_score'], ), + targetScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms'], + ), restSecondsOverride: attachedDatabase.typeMapping.read( DriftSqlType.int, data['${effectivePrefix}rest_seconds_override'], @@ -9505,6 +10847,7 @@ class ProgramExercise extends DataClass implements Insertable { final bool availableTimeSnapshot; final bool availableRepsSnapshot; final bool availableScoreSnapshot; + final String scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final int setsCount; @@ -9514,6 +10857,7 @@ class ProgramExercise extends DataClass implements Insertable { final int? targetTimeSeconds; final int? targetReps; final double? targetScore; + final int? targetScoreTimeMs; final int? restSecondsOverride; const ProgramExercise({ required this.id, @@ -9538,6 +10882,7 @@ class ProgramExercise extends DataClass implements Insertable { required this.availableTimeSnapshot, required this.availableRepsSnapshot, required this.availableScoreSnapshot, + required this.scoreInputModeSnapshot, this.scoreLabelSnapshot, this.scoreUnitSnapshot, required this.setsCount, @@ -9547,6 +10892,7 @@ class ProgramExercise extends DataClass implements Insertable { this.targetTimeSeconds, this.targetReps, this.targetScore, + this.targetScoreTimeMs, this.restSecondsOverride, }); @override @@ -9598,6 +10944,7 @@ class ProgramExercise extends DataClass implements Insertable { map['available_time_snapshot'] = Variable(availableTimeSnapshot); map['available_reps_snapshot'] = Variable(availableRepsSnapshot); map['available_score_snapshot'] = Variable(availableScoreSnapshot); + map['score_input_mode_snapshot'] = Variable(scoreInputModeSnapshot); if (!nullToAbsent || scoreLabelSnapshot != null) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot); } @@ -9617,6 +10964,9 @@ class ProgramExercise extends DataClass implements Insertable { if (!nullToAbsent || targetScore != null) { map['target_score'] = Variable(targetScore); } + if (!nullToAbsent || targetScoreTimeMs != null) { + map['target_score_time_ms'] = Variable(targetScoreTimeMs); + } if (!nullToAbsent || restSecondsOverride != null) { map['rest_seconds_override'] = Variable(restSecondsOverride); } @@ -9666,6 +11016,7 @@ class ProgramExercise extends DataClass implements Insertable { availableTimeSnapshot: Value(availableTimeSnapshot), availableRepsSnapshot: Value(availableRepsSnapshot), availableScoreSnapshot: Value(availableScoreSnapshot), + scoreInputModeSnapshot: Value(scoreInputModeSnapshot), scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent ? const Value.absent() : Value(scoreLabelSnapshot), @@ -9685,6 +11036,9 @@ class ProgramExercise extends DataClass implements Insertable { targetScore: targetScore == null && nullToAbsent ? const Value.absent() : Value(targetScore), + targetScoreTimeMs: targetScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMs), restSecondsOverride: restSecondsOverride == null && nullToAbsent ? const Value.absent() : Value(restSecondsOverride), @@ -9737,6 +11091,9 @@ class ProgramExercise extends DataClass implements Insertable { availableScoreSnapshot: serializer.fromJson( json['availableScoreSnapshot'], ), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), scoreLabelSnapshot: serializer.fromJson( json['scoreLabelSnapshot'], ), @@ -9750,6 +11107,7 @@ class ProgramExercise extends DataClass implements Insertable { targetTimeSeconds: serializer.fromJson(json['targetTimeSeconds']), targetReps: serializer.fromJson(json['targetReps']), targetScore: serializer.fromJson(json['targetScore']), + targetScoreTimeMs: serializer.fromJson(json['targetScoreTimeMs']), restSecondsOverride: serializer.fromJson( json['restSecondsOverride'], ), @@ -9789,6 +11147,9 @@ class ProgramExercise extends DataClass implements Insertable { 'availableTimeSnapshot': serializer.toJson(availableTimeSnapshot), 'availableRepsSnapshot': serializer.toJson(availableRepsSnapshot), 'availableScoreSnapshot': serializer.toJson(availableScoreSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), 'setsCount': serializer.toJson(setsCount), @@ -9798,6 +11159,7 @@ class ProgramExercise extends DataClass implements Insertable { 'targetTimeSeconds': serializer.toJson(targetTimeSeconds), 'targetReps': serializer.toJson(targetReps), 'targetScore': serializer.toJson(targetScore), + 'targetScoreTimeMs': serializer.toJson(targetScoreTimeMs), 'restSecondsOverride': serializer.toJson(restSecondsOverride), }; } @@ -9825,6 +11187,7 @@ class ProgramExercise extends DataClass implements Insertable { bool? availableTimeSnapshot, bool? availableRepsSnapshot, bool? availableScoreSnapshot, + String? scoreInputModeSnapshot, Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), int? setsCount, @@ -9834,6 +11197,7 @@ class ProgramExercise extends DataClass implements Insertable { Value targetTimeSeconds = const Value.absent(), Value targetReps = const Value.absent(), Value targetScore = const Value.absent(), + Value targetScoreTimeMs = const Value.absent(), Value restSecondsOverride = const Value.absent(), }) => ProgramExercise( id: id ?? this.id, @@ -9872,6 +11236,8 @@ class ProgramExercise extends DataClass implements Insertable { availableRepsSnapshot: availableRepsSnapshot ?? this.availableRepsSnapshot, availableScoreSnapshot: availableScoreSnapshot ?? this.availableScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot.present ? scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -9887,6 +11253,9 @@ class ProgramExercise extends DataClass implements Insertable { : this.targetTimeSeconds, targetReps: targetReps.present ? targetReps.value : this.targetReps, targetScore: targetScore.present ? targetScore.value : this.targetScore, + targetScoreTimeMs: targetScoreTimeMs.present + ? targetScoreTimeMs.value + : this.targetScoreTimeMs, restSecondsOverride: restSecondsOverride.present ? restSecondsOverride.value : this.restSecondsOverride, @@ -9945,6 +11314,9 @@ class ProgramExercise extends DataClass implements Insertable { availableScoreSnapshot: data.availableScoreSnapshot.present ? data.availableScoreSnapshot.value : this.availableScoreSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, scoreLabelSnapshot: data.scoreLabelSnapshot.present ? data.scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -9970,6 +11342,9 @@ class ProgramExercise extends DataClass implements Insertable { targetScore: data.targetScore.present ? data.targetScore.value : this.targetScore, + targetScoreTimeMs: data.targetScoreTimeMs.present + ? data.targetScoreTimeMs.value + : this.targetScoreTimeMs, restSecondsOverride: data.restSecondsOverride.present ? data.restSecondsOverride.value : this.restSecondsOverride, @@ -10005,6 +11380,7 @@ class ProgramExercise extends DataClass implements Insertable { ..write('availableTimeSnapshot: $availableTimeSnapshot, ') ..write('availableRepsSnapshot: $availableRepsSnapshot, ') ..write('availableScoreSnapshot: $availableScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('setsCount: $setsCount, ') @@ -10014,6 +11390,7 @@ class ProgramExercise extends DataClass implements Insertable { ..write('targetTimeSeconds: $targetTimeSeconds, ') ..write('targetReps: $targetReps, ') ..write('targetScore: $targetScore, ') + ..write('targetScoreTimeMs: $targetScoreTimeMs, ') ..write('restSecondsOverride: $restSecondsOverride') ..write(')')) .toString(); @@ -10043,6 +11420,7 @@ class ProgramExercise extends DataClass implements Insertable { availableTimeSnapshot, availableRepsSnapshot, availableScoreSnapshot, + scoreInputModeSnapshot, scoreLabelSnapshot, scoreUnitSnapshot, setsCount, @@ -10052,6 +11430,7 @@ class ProgramExercise extends DataClass implements Insertable { targetTimeSeconds, targetReps, targetScore, + targetScoreTimeMs, restSecondsOverride, ]); @override @@ -10083,6 +11462,7 @@ class ProgramExercise extends DataClass implements Insertable { other.availableTimeSnapshot == this.availableTimeSnapshot && other.availableRepsSnapshot == this.availableRepsSnapshot && other.availableScoreSnapshot == this.availableScoreSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && other.scoreLabelSnapshot == this.scoreLabelSnapshot && other.scoreUnitSnapshot == this.scoreUnitSnapshot && other.setsCount == this.setsCount && @@ -10092,6 +11472,7 @@ class ProgramExercise extends DataClass implements Insertable { other.targetTimeSeconds == this.targetTimeSeconds && other.targetReps == this.targetReps && other.targetScore == this.targetScore && + other.targetScoreTimeMs == this.targetScoreTimeMs && other.restSecondsOverride == this.restSecondsOverride); } @@ -10118,6 +11499,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { final Value availableTimeSnapshot; final Value availableRepsSnapshot; final Value availableScoreSnapshot; + final Value scoreInputModeSnapshot; final Value scoreLabelSnapshot; final Value scoreUnitSnapshot; final Value setsCount; @@ -10127,6 +11509,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { final Value targetTimeSeconds; final Value targetReps; final Value targetScore; + final Value targetScoreTimeMs; final Value restSecondsOverride; final Value rowid; const ProgramExercisesCompanion({ @@ -10152,6 +11535,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { this.availableTimeSnapshot = const Value.absent(), this.availableRepsSnapshot = const Value.absent(), this.availableScoreSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), this.setsCount = const Value.absent(), @@ -10161,6 +11545,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { this.targetTimeSeconds = const Value.absent(), this.targetReps = const Value.absent(), this.targetScore = const Value.absent(), + this.targetScoreTimeMs = const Value.absent(), this.restSecondsOverride = const Value.absent(), this.rowid = const Value.absent(), }); @@ -10187,6 +11572,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { required bool availableTimeSnapshot, required bool availableRepsSnapshot, required bool availableScoreSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), required int setsCount, @@ -10196,6 +11582,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { this.targetTimeSeconds = const Value.absent(), this.targetReps = const Value.absent(), this.targetScore = const Value.absent(), + this.targetScoreTimeMs = const Value.absent(), this.restSecondsOverride = const Value.absent(), this.rowid = const Value.absent(), }) : id = Value(id), @@ -10237,6 +11624,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { Expression? availableTimeSnapshot, Expression? availableRepsSnapshot, Expression? availableScoreSnapshot, + Expression? scoreInputModeSnapshot, Expression? scoreLabelSnapshot, Expression? scoreUnitSnapshot, Expression? setsCount, @@ -10246,6 +11634,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { Expression? targetTimeSeconds, Expression? targetReps, Expression? targetScore, + Expression? targetScoreTimeMs, Expression? restSecondsOverride, Expression? rowid, }) { @@ -10281,6 +11670,8 @@ class ProgramExercisesCompanion extends UpdateCompanion { 'available_reps_snapshot': availableRepsSnapshot, if (availableScoreSnapshot != null) 'available_score_snapshot': availableScoreSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, if (scoreLabelSnapshot != null) 'score_label_snapshot': scoreLabelSnapshot, if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, @@ -10291,6 +11682,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { if (targetTimeSeconds != null) 'target_time_seconds': targetTimeSeconds, if (targetReps != null) 'target_reps': targetReps, if (targetScore != null) 'target_score': targetScore, + if (targetScoreTimeMs != null) 'target_score_time_ms': targetScoreTimeMs, if (restSecondsOverride != null) 'rest_seconds_override': restSecondsOverride, if (rowid != null) 'rowid': rowid, @@ -10320,6 +11712,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { Value? availableTimeSnapshot, Value? availableRepsSnapshot, Value? availableScoreSnapshot, + Value? scoreInputModeSnapshot, Value? scoreLabelSnapshot, Value? scoreUnitSnapshot, Value? setsCount, @@ -10329,6 +11722,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { Value? targetTimeSeconds, Value? targetReps, Value? targetScore, + Value? targetScoreTimeMs, Value? restSecondsOverride, Value? rowid, }) { @@ -10362,6 +11756,8 @@ class ProgramExercisesCompanion extends UpdateCompanion { availableRepsSnapshot ?? this.availableRepsSnapshot, availableScoreSnapshot: availableScoreSnapshot ?? this.availableScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, setsCount: setsCount ?? this.setsCount, @@ -10371,6 +11767,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { targetTimeSeconds: targetTimeSeconds ?? this.targetTimeSeconds, targetReps: targetReps ?? this.targetReps, targetScore: targetScore ?? this.targetScore, + targetScoreTimeMs: targetScoreTimeMs ?? this.targetScoreTimeMs, restSecondsOverride: restSecondsOverride ?? this.restSecondsOverride, rowid: rowid ?? this.rowid, ); @@ -10463,6 +11860,11 @@ class ProgramExercisesCompanion extends UpdateCompanion { availableScoreSnapshot.value, ); } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } if (scoreLabelSnapshot.present) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); } @@ -10490,6 +11892,9 @@ class ProgramExercisesCompanion extends UpdateCompanion { if (targetScore.present) { map['target_score'] = Variable(targetScore.value); } + if (targetScoreTimeMs.present) { + map['target_score_time_ms'] = Variable(targetScoreTimeMs.value); + } if (restSecondsOverride.present) { map['rest_seconds_override'] = Variable(restSecondsOverride.value); } @@ -10528,6 +11933,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { ..write('availableTimeSnapshot: $availableTimeSnapshot, ') ..write('availableRepsSnapshot: $availableRepsSnapshot, ') ..write('availableScoreSnapshot: $availableScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('setsCount: $setsCount, ') @@ -10537,6 +11943,7 @@ class ProgramExercisesCompanion extends UpdateCompanion { ..write('targetTimeSeconds: $targetTimeSeconds, ') ..write('targetReps: $targetReps, ') ..write('targetScore: $targetScore, ') + ..write('targetScoreTimeMs: $targetScoreTimeMs, ') ..write('restSecondsOverride: $restSecondsOverride, ') ..write('rowid: $rowid') ..write(')')) @@ -11967,6 +13374,18 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults 'CHECK ("score_enabled_snapshot" IN (0, 1))', ), ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: false, + defaultValue: const Constant('manual'), + ); static const VerificationMeta _targetTimeSecondsSnapshotMeta = const VerificationMeta('targetTimeSecondsSnapshot'); @override @@ -11999,6 +13418,17 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults type: DriftSqlType.double, requiredDuringInsert: false, ); + static const VerificationMeta _targetScoreTimeMsSnapshotMeta = + const VerificationMeta('targetScoreTimeMsSnapshot'); + @override + late final GeneratedColumn targetScoreTimeMsSnapshot = + GeneratedColumn( + 'target_score_time_ms_snapshot', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); static const VerificationMeta _actualTimeMsMeta = const VerificationMeta( 'actualTimeMs', ); @@ -12032,6 +13462,17 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults type: DriftSqlType.double, requiredDuringInsert: false, ); + static const VerificationMeta _actualScoreTimeMsMeta = const VerificationMeta( + 'actualScoreTimeMs', + ); + @override + late final GeneratedColumn actualScoreTimeMs = GeneratedColumn( + 'actual_score_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); static const VerificationMeta _scoreLabelSnapshotMeta = const VerificationMeta('scoreLabelSnapshot'); @override @@ -12111,12 +13552,15 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults timeEnabledSnapshot, repsEnabledSnapshot, scoreEnabledSnapshot, + scoreInputModeSnapshot, targetTimeSecondsSnapshot, targetRepsSnapshot, targetScoreSnapshot, + targetScoreTimeMsSnapshot, actualTimeMs, actualReps, actualScore, + actualScoreTimeMs, scoreLabelSnapshot, scoreUnitSnapshot, startedAt, @@ -12346,6 +13790,15 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults } else if (isInserting) { context.missing(_scoreEnabledSnapshotMeta); } + if (data.containsKey('score_input_mode_snapshot')) { + context.handle( + _scoreInputModeSnapshotMeta, + scoreInputModeSnapshot.isAcceptableOrUnknown( + data['score_input_mode_snapshot']!, + _scoreInputModeSnapshotMeta, + ), + ); + } if (data.containsKey('target_time_seconds_snapshot')) { context.handle( _targetTimeSecondsSnapshotMeta, @@ -12373,6 +13826,15 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults ), ); } + if (data.containsKey('target_score_time_ms_snapshot')) { + context.handle( + _targetScoreTimeMsSnapshotMeta, + targetScoreTimeMsSnapshot.isAcceptableOrUnknown( + data['target_score_time_ms_snapshot']!, + _targetScoreTimeMsSnapshotMeta, + ), + ); + } if (data.containsKey('actual_time_ms')) { context.handle( _actualTimeMsMeta, @@ -12397,6 +13859,15 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults ), ); } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } if (data.containsKey('score_label_snapshot')) { context.handle( _scoreLabelSnapshotMeta, @@ -12536,6 +14007,10 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults DriftSqlType.bool, data['${effectivePrefix}score_enabled_snapshot'], )!, + scoreInputModeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_input_mode_snapshot'], + )!, targetTimeSecondsSnapshot: attachedDatabase.typeMapping.read( DriftSqlType.int, data['${effectivePrefix}target_time_seconds_snapshot'], @@ -12548,6 +14023,10 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults DriftSqlType.double, data['${effectivePrefix}target_score_snapshot'], ), + targetScoreTimeMsSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_snapshot'], + ), actualTimeMs: attachedDatabase.typeMapping.read( DriftSqlType.int, data['${effectivePrefix}actual_time_ms'], @@ -12560,6 +14039,10 @@ class $WorkoutHistorySetResultsTable extends WorkoutHistorySetResults DriftSqlType.double, data['${effectivePrefix}actual_score'], ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), scoreLabelSnapshot: attachedDatabase.typeMapping.read( DriftSqlType.string, data['${effectivePrefix}score_label_snapshot'], @@ -12613,12 +14096,15 @@ class WorkoutHistorySetResult extends DataClass final bool timeEnabledSnapshot; final bool repsEnabledSnapshot; final bool scoreEnabledSnapshot; + final String scoreInputModeSnapshot; final int? targetTimeSecondsSnapshot; final int? targetRepsSnapshot; final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; final int? actualTimeMs; final int? actualReps; final double? actualScore; + final int? actualScoreTimeMs; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; final DateTime? startedAt; @@ -12647,12 +14133,15 @@ class WorkoutHistorySetResult extends DataClass required this.timeEnabledSnapshot, required this.repsEnabledSnapshot, required this.scoreEnabledSnapshot, + required this.scoreInputModeSnapshot, this.targetTimeSecondsSnapshot, this.targetRepsSnapshot, this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, this.actualTimeMs, this.actualReps, this.actualScore, + this.actualScoreTimeMs, this.scoreLabelSnapshot, this.scoreUnitSnapshot, this.startedAt, @@ -12692,6 +14181,7 @@ class WorkoutHistorySetResult extends DataClass map['time_enabled_snapshot'] = Variable(timeEnabledSnapshot); map['reps_enabled_snapshot'] = Variable(repsEnabledSnapshot); map['score_enabled_snapshot'] = Variable(scoreEnabledSnapshot); + map['score_input_mode_snapshot'] = Variable(scoreInputModeSnapshot); if (!nullToAbsent || targetTimeSecondsSnapshot != null) { map['target_time_seconds_snapshot'] = Variable( targetTimeSecondsSnapshot, @@ -12703,6 +14193,11 @@ class WorkoutHistorySetResult extends DataClass if (!nullToAbsent || targetScoreSnapshot != null) { map['target_score_snapshot'] = Variable(targetScoreSnapshot); } + if (!nullToAbsent || targetScoreTimeMsSnapshot != null) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot, + ); + } if (!nullToAbsent || actualTimeMs != null) { map['actual_time_ms'] = Variable(actualTimeMs); } @@ -12712,6 +14207,9 @@ class WorkoutHistorySetResult extends DataClass if (!nullToAbsent || actualScore != null) { map['actual_score'] = Variable(actualScore); } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } if (!nullToAbsent || scoreLabelSnapshot != null) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot); } @@ -12760,6 +14258,7 @@ class WorkoutHistorySetResult extends DataClass timeEnabledSnapshot: Value(timeEnabledSnapshot), repsEnabledSnapshot: Value(repsEnabledSnapshot), scoreEnabledSnapshot: Value(scoreEnabledSnapshot), + scoreInputModeSnapshot: Value(scoreInputModeSnapshot), targetTimeSecondsSnapshot: targetTimeSecondsSnapshot == null && nullToAbsent ? const Value.absent() @@ -12770,6 +14269,10 @@ class WorkoutHistorySetResult extends DataClass targetScoreSnapshot: targetScoreSnapshot == null && nullToAbsent ? const Value.absent() : Value(targetScoreSnapshot), + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsSnapshot), actualTimeMs: actualTimeMs == null && nullToAbsent ? const Value.absent() : Value(actualTimeMs), @@ -12779,6 +14282,9 @@ class WorkoutHistorySetResult extends DataClass actualScore: actualScore == null && nullToAbsent ? const Value.absent() : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent ? const Value.absent() : Value(scoreLabelSnapshot), @@ -12837,6 +14343,9 @@ class WorkoutHistorySetResult extends DataClass scoreEnabledSnapshot: serializer.fromJson( json['scoreEnabledSnapshot'], ), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), targetTimeSecondsSnapshot: serializer.fromJson( json['targetTimeSecondsSnapshot'], ), @@ -12844,9 +14353,13 @@ class WorkoutHistorySetResult extends DataClass targetScoreSnapshot: serializer.fromJson( json['targetScoreSnapshot'], ), + targetScoreTimeMsSnapshot: serializer.fromJson( + json['targetScoreTimeMsSnapshot'], + ), actualTimeMs: serializer.fromJson(json['actualTimeMs']), actualReps: serializer.fromJson(json['actualReps']), actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), scoreLabelSnapshot: serializer.fromJson( json['scoreLabelSnapshot'], ), @@ -12884,14 +14397,21 @@ class WorkoutHistorySetResult extends DataClass 'timeEnabledSnapshot': serializer.toJson(timeEnabledSnapshot), 'repsEnabledSnapshot': serializer.toJson(repsEnabledSnapshot), 'scoreEnabledSnapshot': serializer.toJson(scoreEnabledSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), 'targetTimeSecondsSnapshot': serializer.toJson( targetTimeSecondsSnapshot, ), 'targetRepsSnapshot': serializer.toJson(targetRepsSnapshot), 'targetScoreSnapshot': serializer.toJson(targetScoreSnapshot), + 'targetScoreTimeMsSnapshot': serializer.toJson( + targetScoreTimeMsSnapshot, + ), 'actualTimeMs': serializer.toJson(actualTimeMs), 'actualReps': serializer.toJson(actualReps), 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), 'startedAt': serializer.toJson(startedAt), @@ -12923,12 +14443,15 @@ class WorkoutHistorySetResult extends DataClass bool? timeEnabledSnapshot, bool? repsEnabledSnapshot, bool? scoreEnabledSnapshot, + String? scoreInputModeSnapshot, Value targetTimeSecondsSnapshot = const Value.absent(), Value targetRepsSnapshot = const Value.absent(), Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value startedAt = const Value.absent(), @@ -12961,6 +14484,8 @@ class WorkoutHistorySetResult extends DataClass timeEnabledSnapshot: timeEnabledSnapshot ?? this.timeEnabledSnapshot, repsEnabledSnapshot: repsEnabledSnapshot ?? this.repsEnabledSnapshot, scoreEnabledSnapshot: scoreEnabledSnapshot ?? this.scoreEnabledSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, targetTimeSecondsSnapshot: targetTimeSecondsSnapshot.present ? targetTimeSecondsSnapshot.value : this.targetTimeSecondsSnapshot, @@ -12970,9 +14495,15 @@ class WorkoutHistorySetResult extends DataClass targetScoreSnapshot: targetScoreSnapshot.present ? targetScoreSnapshot.value : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot.present + ? targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, actualTimeMs: actualTimeMs.present ? actualTimeMs.value : this.actualTimeMs, actualReps: actualReps.present ? actualReps.value : this.actualReps, actualScore: actualScore.present ? actualScore.value : this.actualScore, + actualScoreTimeMs: actualScoreTimeMs.present + ? actualScoreTimeMs.value + : this.actualScoreTimeMs, scoreLabelSnapshot: scoreLabelSnapshot.present ? scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -13041,6 +14572,9 @@ class WorkoutHistorySetResult extends DataClass scoreEnabledSnapshot: data.scoreEnabledSnapshot.present ? data.scoreEnabledSnapshot.value : this.scoreEnabledSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, targetTimeSecondsSnapshot: data.targetTimeSecondsSnapshot.present ? data.targetTimeSecondsSnapshot.value : this.targetTimeSecondsSnapshot, @@ -13050,6 +14584,9 @@ class WorkoutHistorySetResult extends DataClass targetScoreSnapshot: data.targetScoreSnapshot.present ? data.targetScoreSnapshot.value : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: data.targetScoreTimeMsSnapshot.present + ? data.targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, actualTimeMs: data.actualTimeMs.present ? data.actualTimeMs.value : this.actualTimeMs, @@ -13059,6 +14596,9 @@ class WorkoutHistorySetResult extends DataClass actualScore: data.actualScore.present ? data.actualScore.value : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, scoreLabelSnapshot: data.scoreLabelSnapshot.present ? data.scoreLabelSnapshot.value : this.scoreLabelSnapshot, @@ -13098,12 +14638,15 @@ class WorkoutHistorySetResult extends DataClass ..write('timeEnabledSnapshot: $timeEnabledSnapshot, ') ..write('repsEnabledSnapshot: $repsEnabledSnapshot, ') ..write('scoreEnabledSnapshot: $scoreEnabledSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('targetTimeSecondsSnapshot: $targetTimeSecondsSnapshot, ') ..write('targetRepsSnapshot: $targetRepsSnapshot, ') ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') ..write('actualTimeMs: $actualTimeMs, ') ..write('actualReps: $actualReps, ') ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('startedAt: $startedAt, ') @@ -13137,12 +14680,15 @@ class WorkoutHistorySetResult extends DataClass timeEnabledSnapshot, repsEnabledSnapshot, scoreEnabledSnapshot, + scoreInputModeSnapshot, targetTimeSecondsSnapshot, targetRepsSnapshot, targetScoreSnapshot, + targetScoreTimeMsSnapshot, actualTimeMs, actualReps, actualScore, + actualScoreTimeMs, scoreLabelSnapshot, scoreUnitSnapshot, startedAt, @@ -13175,12 +14721,15 @@ class WorkoutHistorySetResult extends DataClass other.timeEnabledSnapshot == this.timeEnabledSnapshot && other.repsEnabledSnapshot == this.repsEnabledSnapshot && other.scoreEnabledSnapshot == this.scoreEnabledSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && other.targetTimeSecondsSnapshot == this.targetTimeSecondsSnapshot && other.targetRepsSnapshot == this.targetRepsSnapshot && other.targetScoreSnapshot == this.targetScoreSnapshot && + other.targetScoreTimeMsSnapshot == this.targetScoreTimeMsSnapshot && other.actualTimeMs == this.actualTimeMs && other.actualReps == this.actualReps && other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && other.scoreLabelSnapshot == this.scoreLabelSnapshot && other.scoreUnitSnapshot == this.scoreUnitSnapshot && other.startedAt == this.startedAt && @@ -13212,12 +14761,15 @@ class WorkoutHistorySetResultsCompanion final Value timeEnabledSnapshot; final Value repsEnabledSnapshot; final Value scoreEnabledSnapshot; + final Value scoreInputModeSnapshot; final Value targetTimeSecondsSnapshot; final Value targetRepsSnapshot; final Value targetScoreSnapshot; + final Value targetScoreTimeMsSnapshot; final Value actualTimeMs; final Value actualReps; final Value actualScore; + final Value actualScoreTimeMs; final Value scoreLabelSnapshot; final Value scoreUnitSnapshot; final Value startedAt; @@ -13247,12 +14799,15 @@ class WorkoutHistorySetResultsCompanion this.timeEnabledSnapshot = const Value.absent(), this.repsEnabledSnapshot = const Value.absent(), this.scoreEnabledSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), this.targetTimeSecondsSnapshot = const Value.absent(), this.targetRepsSnapshot = const Value.absent(), this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), this.actualTimeMs = const Value.absent(), this.actualReps = const Value.absent(), this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), this.startedAt = const Value.absent(), @@ -13283,12 +14838,15 @@ class WorkoutHistorySetResultsCompanion required bool timeEnabledSnapshot, required bool repsEnabledSnapshot, required bool scoreEnabledSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), this.targetTimeSecondsSnapshot = const Value.absent(), this.targetRepsSnapshot = const Value.absent(), this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), this.actualTimeMs = const Value.absent(), this.actualReps = const Value.absent(), this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), this.scoreLabelSnapshot = const Value.absent(), this.scoreUnitSnapshot = const Value.absent(), this.startedAt = const Value.absent(), @@ -13335,12 +14893,15 @@ class WorkoutHistorySetResultsCompanion Expression? timeEnabledSnapshot, Expression? repsEnabledSnapshot, Expression? scoreEnabledSnapshot, + Expression? scoreInputModeSnapshot, Expression? targetTimeSecondsSnapshot, Expression? targetRepsSnapshot, Expression? targetScoreSnapshot, + Expression? targetScoreTimeMsSnapshot, Expression? actualTimeMs, Expression? actualReps, Expression? actualScore, + Expression? actualScoreTimeMs, Expression? scoreLabelSnapshot, Expression? scoreUnitSnapshot, Expression? startedAt, @@ -13378,15 +14939,20 @@ class WorkoutHistorySetResultsCompanion 'reps_enabled_snapshot': repsEnabledSnapshot, if (scoreEnabledSnapshot != null) 'score_enabled_snapshot': scoreEnabledSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, if (targetTimeSecondsSnapshot != null) 'target_time_seconds_snapshot': targetTimeSecondsSnapshot, if (targetRepsSnapshot != null) 'target_reps_snapshot': targetRepsSnapshot, if (targetScoreSnapshot != null) 'target_score_snapshot': targetScoreSnapshot, + if (targetScoreTimeMsSnapshot != null) + 'target_score_time_ms_snapshot': targetScoreTimeMsSnapshot, if (actualTimeMs != null) 'actual_time_ms': actualTimeMs, if (actualReps != null) 'actual_reps': actualReps, if (actualScore != null) 'actual_score': actualScore, + if (actualScoreTimeMs != null) 'actual_score_time_ms': actualScoreTimeMs, if (scoreLabelSnapshot != null) 'score_label_snapshot': scoreLabelSnapshot, if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, @@ -13420,12 +14986,15 @@ class WorkoutHistorySetResultsCompanion Value? timeEnabledSnapshot, Value? repsEnabledSnapshot, Value? scoreEnabledSnapshot, + Value? scoreInputModeSnapshot, Value? targetTimeSecondsSnapshot, Value? targetRepsSnapshot, Value? targetScoreSnapshot, + Value? targetScoreTimeMsSnapshot, Value? actualTimeMs, Value? actualReps, Value? actualScore, + Value? actualScoreTimeMs, Value? scoreLabelSnapshot, Value? scoreUnitSnapshot, Value? startedAt, @@ -13456,13 +15025,18 @@ class WorkoutHistorySetResultsCompanion timeEnabledSnapshot: timeEnabledSnapshot ?? this.timeEnabledSnapshot, repsEnabledSnapshot: repsEnabledSnapshot ?? this.repsEnabledSnapshot, scoreEnabledSnapshot: scoreEnabledSnapshot ?? this.scoreEnabledSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, targetTimeSecondsSnapshot: targetTimeSecondsSnapshot ?? this.targetTimeSecondsSnapshot, targetRepsSnapshot: targetRepsSnapshot ?? this.targetRepsSnapshot, targetScoreSnapshot: targetScoreSnapshot ?? this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot ?? this.targetScoreTimeMsSnapshot, actualTimeMs: actualTimeMs ?? this.actualTimeMs, actualReps: actualReps ?? this.actualReps, actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, startedAt: startedAt ?? this.startedAt, @@ -13549,6 +15123,11 @@ class WorkoutHistorySetResultsCompanion scoreEnabledSnapshot.value, ); } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } if (targetTimeSecondsSnapshot.present) { map['target_time_seconds_snapshot'] = Variable( targetTimeSecondsSnapshot.value, @@ -13562,6 +15141,11 @@ class WorkoutHistorySetResultsCompanion targetScoreSnapshot.value, ); } + if (targetScoreTimeMsSnapshot.present) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot.value, + ); + } if (actualTimeMs.present) { map['actual_time_ms'] = Variable(actualTimeMs.value); } @@ -13571,6 +15155,9 @@ class WorkoutHistorySetResultsCompanion if (actualScore.present) { map['actual_score'] = Variable(actualScore.value); } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } if (scoreLabelSnapshot.present) { map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); } @@ -13617,12 +15204,15 @@ class WorkoutHistorySetResultsCompanion ..write('timeEnabledSnapshot: $timeEnabledSnapshot, ') ..write('repsEnabledSnapshot: $repsEnabledSnapshot, ') ..write('scoreEnabledSnapshot: $scoreEnabledSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') ..write('targetTimeSecondsSnapshot: $targetTimeSecondsSnapshot, ') ..write('targetRepsSnapshot: $targetRepsSnapshot, ') ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') ..write('actualTimeMs: $actualTimeMs, ') ..write('actualReps: $actualReps, ') ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') ..write('startedAt: $startedAt, ') @@ -14889,6 +16479,17 @@ class $WorkoutTemplateExerciseOverridesTable type: DriftSqlType.double, requiredDuringInsert: false, ); + static const VerificationMeta _targetScoreTimeMsOverrideMeta = + const VerificationMeta('targetScoreTimeMsOverride'); + @override + late final GeneratedColumn targetScoreTimeMsOverride = + GeneratedColumn( + 'target_score_time_ms_override', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); @override List get $columns => [ id, @@ -14908,6 +16509,7 @@ class $WorkoutTemplateExerciseOverridesTable targetTimeSecondsOverride, targetRepsOverride, targetScoreOverride, + targetScoreTimeMsOverride, ]; @override String get aliasedName => _alias ?? actualTableName; @@ -15072,6 +16674,15 @@ class $WorkoutTemplateExerciseOverridesTable ), ); } + if (data.containsKey('target_score_time_ms_override')) { + context.handle( + _targetScoreTimeMsOverrideMeta, + targetScoreTimeMsOverride.isAcceptableOrUnknown( + data['target_score_time_ms_override']!, + _targetScoreTimeMsOverrideMeta, + ), + ); + } return context; } @@ -15152,6 +16763,10 @@ class $WorkoutTemplateExerciseOverridesTable DriftSqlType.double, data['${effectivePrefix}target_score_override'], ), + targetScoreTimeMsOverride: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_override'], + ), ); } @@ -15180,6 +16795,7 @@ class WorkoutTemplateExerciseOverride extends DataClass final int? targetTimeSecondsOverride; final int? targetRepsOverride; final double? targetScoreOverride; + final int? targetScoreTimeMsOverride; const WorkoutTemplateExerciseOverride({ required this.id, required this.createdAt, @@ -15198,6 +16814,7 @@ class WorkoutTemplateExerciseOverride extends DataClass this.targetTimeSecondsOverride, this.targetRepsOverride, this.targetScoreOverride, + this.targetScoreTimeMsOverride, }); @override Map toColumns(bool nullToAbsent) { @@ -15241,6 +16858,11 @@ class WorkoutTemplateExerciseOverride extends DataClass if (!nullToAbsent || targetScoreOverride != null) { map['target_score_override'] = Variable(targetScoreOverride); } + if (!nullToAbsent || targetScoreTimeMsOverride != null) { + map['target_score_time_ms_override'] = Variable( + targetScoreTimeMsOverride, + ); + } return map; } @@ -15280,6 +16902,10 @@ class WorkoutTemplateExerciseOverride extends DataClass targetScoreOverride: targetScoreOverride == null && nullToAbsent ? const Value.absent() : Value(targetScoreOverride), + targetScoreTimeMsOverride: + targetScoreTimeMsOverride == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsOverride), ); } @@ -15316,6 +16942,9 @@ class WorkoutTemplateExerciseOverride extends DataClass targetScoreOverride: serializer.fromJson( json['targetScoreOverride'], ), + targetScoreTimeMsOverride: serializer.fromJson( + json['targetScoreTimeMsOverride'], + ), ); } @override @@ -15345,6 +16974,9 @@ class WorkoutTemplateExerciseOverride extends DataClass ), 'targetRepsOverride': serializer.toJson(targetRepsOverride), 'targetScoreOverride': serializer.toJson(targetScoreOverride), + 'targetScoreTimeMsOverride': serializer.toJson( + targetScoreTimeMsOverride, + ), }; } @@ -15366,6 +16998,7 @@ class WorkoutTemplateExerciseOverride extends DataClass Value targetTimeSecondsOverride = const Value.absent(), Value targetRepsOverride = const Value.absent(), Value targetScoreOverride = const Value.absent(), + Value targetScoreTimeMsOverride = const Value.absent(), }) => WorkoutTemplateExerciseOverride( id: id ?? this.id, createdAt: createdAt ?? this.createdAt, @@ -15398,6 +17031,9 @@ class WorkoutTemplateExerciseOverride extends DataClass targetScoreOverride: targetScoreOverride.present ? targetScoreOverride.value : this.targetScoreOverride, + targetScoreTimeMsOverride: targetScoreTimeMsOverride.present + ? targetScoreTimeMsOverride.value + : this.targetScoreTimeMsOverride, ); WorkoutTemplateExerciseOverride copyWithCompanion( WorkoutTemplateExerciseOverridesCompanion data, @@ -15444,6 +17080,9 @@ class WorkoutTemplateExerciseOverride extends DataClass targetScoreOverride: data.targetScoreOverride.present ? data.targetScoreOverride.value : this.targetScoreOverride, + targetScoreTimeMsOverride: data.targetScoreTimeMsOverride.present + ? data.targetScoreTimeMsOverride.value + : this.targetScoreTimeMsOverride, ); } @@ -15466,7 +17105,8 @@ class WorkoutTemplateExerciseOverride extends DataClass ..write('setsCountOverride: $setsCountOverride, ') ..write('targetTimeSecondsOverride: $targetTimeSecondsOverride, ') ..write('targetRepsOverride: $targetRepsOverride, ') - ..write('targetScoreOverride: $targetScoreOverride') + ..write('targetScoreOverride: $targetScoreOverride, ') + ..write('targetScoreTimeMsOverride: $targetScoreTimeMsOverride') ..write(')')) .toString(); } @@ -15490,6 +17130,7 @@ class WorkoutTemplateExerciseOverride extends DataClass targetTimeSecondsOverride, targetRepsOverride, targetScoreOverride, + targetScoreTimeMsOverride, ); @override bool operator ==(Object other) => @@ -15511,7 +17152,8 @@ class WorkoutTemplateExerciseOverride extends DataClass other.setsCountOverride == this.setsCountOverride && other.targetTimeSecondsOverride == this.targetTimeSecondsOverride && other.targetRepsOverride == this.targetRepsOverride && - other.targetScoreOverride == this.targetScoreOverride); + other.targetScoreOverride == this.targetScoreOverride && + other.targetScoreTimeMsOverride == this.targetScoreTimeMsOverride); } class WorkoutTemplateExerciseOverridesCompanion @@ -15533,6 +17175,7 @@ class WorkoutTemplateExerciseOverridesCompanion final Value targetTimeSecondsOverride; final Value targetRepsOverride; final Value targetScoreOverride; + final Value targetScoreTimeMsOverride; final Value rowid; const WorkoutTemplateExerciseOverridesCompanion({ this.id = const Value.absent(), @@ -15552,6 +17195,7 @@ class WorkoutTemplateExerciseOverridesCompanion this.targetTimeSecondsOverride = const Value.absent(), this.targetRepsOverride = const Value.absent(), this.targetScoreOverride = const Value.absent(), + this.targetScoreTimeMsOverride = const Value.absent(), this.rowid = const Value.absent(), }); WorkoutTemplateExerciseOverridesCompanion.insert({ @@ -15572,6 +17216,7 @@ class WorkoutTemplateExerciseOverridesCompanion this.targetTimeSecondsOverride = const Value.absent(), this.targetRepsOverride = const Value.absent(), this.targetScoreOverride = const Value.absent(), + this.targetScoreTimeMsOverride = const Value.absent(), this.rowid = const Value.absent(), }) : id = Value(id), createdAt = Value(createdAt), @@ -15599,6 +17244,7 @@ class WorkoutTemplateExerciseOverridesCompanion Expression? targetTimeSecondsOverride, Expression? targetRepsOverride, Expression? targetScoreOverride, + Expression? targetScoreTimeMsOverride, Expression? rowid, }) { return RawValuesInsertable({ @@ -15625,6 +17271,8 @@ class WorkoutTemplateExerciseOverridesCompanion 'target_reps_override': targetRepsOverride, if (targetScoreOverride != null) 'target_score_override': targetScoreOverride, + if (targetScoreTimeMsOverride != null) + 'target_score_time_ms_override': targetScoreTimeMsOverride, if (rowid != null) 'rowid': rowid, }); } @@ -15647,6 +17295,7 @@ class WorkoutTemplateExerciseOverridesCompanion Value? targetTimeSecondsOverride, Value? targetRepsOverride, Value? targetScoreOverride, + Value? targetScoreTimeMsOverride, Value? rowid, }) { return WorkoutTemplateExerciseOverridesCompanion( @@ -15670,6 +17319,8 @@ class WorkoutTemplateExerciseOverridesCompanion targetTimeSecondsOverride ?? this.targetTimeSecondsOverride, targetRepsOverride: targetRepsOverride ?? this.targetRepsOverride, targetScoreOverride: targetScoreOverride ?? this.targetScoreOverride, + targetScoreTimeMsOverride: + targetScoreTimeMsOverride ?? this.targetScoreTimeMsOverride, rowid: rowid ?? this.rowid, ); } @@ -15738,6 +17389,11 @@ class WorkoutTemplateExerciseOverridesCompanion targetScoreOverride.value, ); } + if (targetScoreTimeMsOverride.present) { + map['target_score_time_ms_override'] = Variable( + targetScoreTimeMsOverride.value, + ); + } if (rowid.present) { map['rowid'] = Variable(rowid.value); } @@ -15764,6 +17420,7 @@ class WorkoutTemplateExerciseOverridesCompanion ..write('targetTimeSecondsOverride: $targetTimeSecondsOverride, ') ..write('targetRepsOverride: $targetRepsOverride, ') ..write('targetScoreOverride: $targetScoreOverride, ') + ..write('targetScoreTimeMsOverride: $targetScoreTimeMsOverride, ') ..write('rowid: $rowid') ..write(')')) .toString(); @@ -15781,6 +17438,8 @@ abstract class _$AppDatabase extends GeneratedDatabase { late final $ActiveRestStatesTable activeRestStates = $ActiveRestStatesTable( this, ); + late final $ActiveScoreStopwatchStatesTable activeScoreStopwatchStates = + $ActiveScoreStopwatchStatesTable(this); late final $ActiveSetResultsTable activeSetResults = $ActiveSetResultsTable( this, ); @@ -15812,6 +17471,7 @@ abstract class _$AppDatabase extends GeneratedDatabase { workoutTemplates, activeWorkoutSessions, activeRestStates, + activeScoreStopwatchStates, activeSetResults, changeLogEntries, mediaAssets, @@ -16643,6 +18303,38 @@ final class $$ActiveWorkoutSessionsTableReferences ); } + static MultiTypedResultKey< + $ActiveScoreStopwatchStatesTable, + List + > + _activeScoreStopwatchStatesRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.activeScoreStopwatchStates, + aliasName: + 'active_workout_sessions__id__active_score_stopwatch_states__active_workout_session_id', + ); + + $$ActiveScoreStopwatchStatesTableProcessedTableManager + get activeScoreStopwatchStatesRefs { + final manager = + $$ActiveScoreStopwatchStatesTableTableManager( + $_db, + $_db.activeScoreStopwatchStates, + ).filter( + (f) => f.activeWorkoutSessionId.id.sqlEquals( + $_itemColumn('id')!, + ), + ); + + final cache = $_typedResult.readTableOrNull( + _activeScoreStopwatchStatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + static MultiTypedResultKey<$ActiveSetResultsTable, List> _activeSetResultsRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( db.activeSetResults, @@ -16852,6 +18544,33 @@ class $$ActiveWorkoutSessionsTableFilterComposer return f(composer); } + Expression activeScoreStopwatchStatesRefs( + Expression Function($$ActiveScoreStopwatchStatesTableFilterComposer f) + f, + ) { + final $$ActiveScoreStopwatchStatesTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeScoreStopwatchStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveScoreStopwatchStatesTableFilterComposer( + $db: $db, + $table: $db.activeScoreStopwatchStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeSetResultsRefs( Expression Function($$ActiveSetResultsTableFilterComposer f) f, ) { @@ -17187,6 +18906,35 @@ class $$ActiveWorkoutSessionsTableAnnotationComposer return f(composer); } + Expression activeScoreStopwatchStatesRefs( + Expression Function( + $$ActiveScoreStopwatchStatesTableAnnotationComposer a, + ) + f, + ) { + final $$ActiveScoreStopwatchStatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeScoreStopwatchStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveScoreStopwatchStatesTableAnnotationComposer( + $db: $db, + $table: $db.activeScoreStopwatchStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeSetResultsRefs( Expression Function($$ActiveSetResultsTableAnnotationComposer a) f, ) { @@ -17254,6 +19002,7 @@ class $$ActiveWorkoutSessionsTableTableManager PrefetchHooks Function({ bool sourceWorkoutTemplateId, bool activeRestStatesRefs, + bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, bool workoutHistoriesRefs, }) @@ -17393,6 +19142,7 @@ class $$ActiveWorkoutSessionsTableTableManager ({ sourceWorkoutTemplateId = false, activeRestStatesRefs = false, + activeScoreStopwatchStatesRefs = false, activeSetResultsRefs = false, workoutHistoriesRefs = false, }) { @@ -17400,6 +19150,8 @@ class $$ActiveWorkoutSessionsTableTableManager db: db, explicitlyWatchedTables: [ if (activeRestStatesRefs) db.activeRestStates, + if (activeScoreStopwatchStatesRefs) + db.activeScoreStopwatchStates, if (activeSetResultsRefs) db.activeSetResults, if (workoutHistoriesRefs) db.workoutHistories, ], @@ -17462,6 +19214,28 @@ class $$ActiveWorkoutSessionsTableTableManager ), typedResults: items, ), + if (activeScoreStopwatchStatesRefs) + await $_getPrefetchedData< + ActiveWorkoutSession, + $ActiveWorkoutSessionsTable, + ActiveScoreStopwatchState + >( + currentTable: table, + referencedTable: + $$ActiveWorkoutSessionsTableReferences + ._activeScoreStopwatchStatesRefsTable(db), + managerFromTypedResult: (p0) => + $$ActiveWorkoutSessionsTableReferences( + db, + table, + p0, + ).activeScoreStopwatchStatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.activeWorkoutSessionId == item.id, + ), + typedResults: items, + ), if (activeSetResultsRefs) await $_getPrefetchedData< ActiveWorkoutSession, @@ -17530,6 +19304,7 @@ typedef $$ActiveWorkoutSessionsTableProcessedTableManager = PrefetchHooks Function({ bool sourceWorkoutTemplateId, bool activeRestStatesRefs, + bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, bool workoutHistoriesRefs, }) @@ -18175,6 +19950,640 @@ typedef $$ActiveRestStatesTableProcessedTableManager = ActiveRestState, PrefetchHooks Function({bool activeWorkoutSessionId}) >; +typedef $$ActiveScoreStopwatchStatesTableCreateCompanionBuilder = + ActiveScoreStopwatchStatesCompanion Function({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt, + Value schemaVersion, + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required String status, + required DateTime startedAt, + required int accumulatedMs, + Value stoppedAt, + Value rowid, + }); +typedef $$ActiveScoreStopwatchStatesTableUpdateCompanionBuilder = + ActiveScoreStopwatchStatesCompanion Function({ + Value id, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value schemaVersion, + Value syncState, + Value localRevision, + Value originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + Value activeWorkoutSessionId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value status, + Value startedAt, + Value accumulatedMs, + Value stoppedAt, + Value rowid, + }); + +final class $$ActiveScoreStopwatchStatesTableReferences + extends + BaseReferences< + _$AppDatabase, + $ActiveScoreStopwatchStatesTable, + ActiveScoreStopwatchState + > { + $$ActiveScoreStopwatchStatesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ActiveWorkoutSessionsTable _activeWorkoutSessionIdTable( + _$AppDatabase db, + ) => db.activeWorkoutSessions.createAlias( + 'active_score_stopwatch_states__active_workout_session_id__active_workout_sessions__id', + ); + + $$ActiveWorkoutSessionsTableProcessedTableManager get activeWorkoutSessionId { + final $_column = $_itemColumn('active_workout_session_id')!; + + final manager = $$ActiveWorkoutSessionsTableTableManager( + $_db, + $_db.activeWorkoutSessions, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull( + _activeWorkoutSessionIdTable($_db), + ); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$ActiveScoreStopwatchStatesTableFilterComposer + extends Composer<_$AppDatabase, $ActiveScoreStopwatchStatesTable> { + $$ActiveScoreStopwatchStatesTableFilterComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnFilters get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stoppedAt => $composableBuilder( + column: $table.stoppedAt, + builder: (column) => ColumnFilters(column), + ); + + $$ActiveWorkoutSessionsTableFilterComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableFilterComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveScoreStopwatchStatesTableOrderingComposer + extends Composer<_$AppDatabase, $ActiveScoreStopwatchStatesTable> { + $$ActiveScoreStopwatchStatesTableOrderingComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + ColumnOrderings get id => $composableBuilder( + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get createdAt => $composableBuilder( + column: $table.createdAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get updatedAt => $composableBuilder( + column: $table.updatedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get deletedAt => $composableBuilder( + column: $table.deletedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get syncState => $composableBuilder( + column: $table.syncState, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get setIndex => $composableBuilder( + column: $table.setIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get status => $composableBuilder( + column: $table.status, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get startedAt => $composableBuilder( + column: $table.startedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stoppedAt => $composableBuilder( + column: $table.stoppedAt, + builder: (column) => ColumnOrderings(column), + ); + + $$ActiveWorkoutSessionsTableOrderingComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableOrderingComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableOrderingComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveScoreStopwatchStatesTableAnnotationComposer + extends Composer<_$AppDatabase, $ActiveScoreStopwatchStatesTable> { + $$ActiveScoreStopwatchStatesTableAnnotationComposer({ + required super.$db, + required super.$table, + super.joinBuilder, + super.$addJoinBuilderToRootComposer, + super.$removeJoinBuilderFromRootComposer, + }); + GeneratedColumn get id => + $composableBuilder(column: $table.id, builder: (column) => column); + + GeneratedColumn get createdAt => + $composableBuilder(column: $table.createdAt, builder: (column) => column); + + GeneratedColumn get updatedAt => + $composableBuilder(column: $table.updatedAt, builder: (column) => column); + + GeneratedColumn get deletedAt => + $composableBuilder(column: $table.deletedAt, builder: (column) => column); + + GeneratedColumn get schemaVersion => $composableBuilder( + column: $table.schemaVersion, + builder: (column) => column, + ); + + GeneratedColumn get syncState => + $composableBuilder(column: $table.syncState, builder: (column) => column); + + GeneratedColumn get localRevision => $composableBuilder( + column: $table.localRevision, + builder: (column) => column, + ); + + GeneratedColumn get originDeviceId => $composableBuilder( + column: $table.originDeviceId, + builder: (column) => column, + ); + + GeneratedColumn get futureOwnerProfileId => $composableBuilder( + column: $table.futureOwnerProfileId, + builder: (column) => column, + ); + + GeneratedColumn get lastSyncedAt => $composableBuilder( + column: $table.lastSyncedAt, + builder: (column) => column, + ); + + GeneratedColumn get remoteRevision => $composableBuilder( + column: $table.remoteRevision, + builder: (column) => column, + ); + + GeneratedColumn get programIndex => $composableBuilder( + column: $table.programIndex, + builder: (column) => column, + ); + + GeneratedColumn get exerciseIndex => $composableBuilder( + column: $table.exerciseIndex, + builder: (column) => column, + ); + + GeneratedColumn get setIndex => + $composableBuilder(column: $table.setIndex, builder: (column) => column); + + GeneratedColumn get status => + $composableBuilder(column: $table.status, builder: (column) => column); + + GeneratedColumn get startedAt => + $composableBuilder(column: $table.startedAt, builder: (column) => column); + + GeneratedColumn get accumulatedMs => $composableBuilder( + column: $table.accumulatedMs, + builder: (column) => column, + ); + + GeneratedColumn get stoppedAt => + $composableBuilder(column: $table.stoppedAt, builder: (column) => column); + + $$ActiveWorkoutSessionsTableAnnotationComposer get activeWorkoutSessionId { + final $$ActiveWorkoutSessionsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.activeWorkoutSessionId, + referencedTable: $db.activeWorkoutSessions, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveWorkoutSessionsTableAnnotationComposer( + $db: $db, + $table: $db.activeWorkoutSessions, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$ActiveScoreStopwatchStatesTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ActiveScoreStopwatchStatesTable, + ActiveScoreStopwatchState, + $$ActiveScoreStopwatchStatesTableFilterComposer, + $$ActiveScoreStopwatchStatesTableOrderingComposer, + $$ActiveScoreStopwatchStatesTableAnnotationComposer, + $$ActiveScoreStopwatchStatesTableCreateCompanionBuilder, + $$ActiveScoreStopwatchStatesTableUpdateCompanionBuilder, + ( + ActiveScoreStopwatchState, + $$ActiveScoreStopwatchStatesTableReferences, + ), + ActiveScoreStopwatchState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + > { + $$ActiveScoreStopwatchStatesTableTableManager( + _$AppDatabase db, + $ActiveScoreStopwatchStatesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ActiveScoreStopwatchStatesTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$ActiveScoreStopwatchStatesTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$ActiveScoreStopwatchStatesTableAnnotationComposer( + $db: db, + $table: table, + ), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value createdAt = const Value.absent(), + Value updatedAt = const Value.absent(), + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + Value syncState = const Value.absent(), + Value localRevision = const Value.absent(), + Value originDeviceId = const Value.absent(), + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + Value activeWorkoutSessionId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value accumulatedMs = const Value.absent(), + Value stoppedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveScoreStopwatchStatesCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + stoppedAt: stoppedAt, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + required DateTime createdAt, + required DateTime updatedAt, + Value deletedAt = const Value.absent(), + Value schemaVersion = const Value.absent(), + required String syncState, + required int localRevision, + required String originDeviceId, + Value futureOwnerProfileId = const Value.absent(), + Value lastSyncedAt = const Value.absent(), + Value remoteRevision = const Value.absent(), + required String activeWorkoutSessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required String status, + required DateTime startedAt, + required int accumulatedMs, + Value stoppedAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveScoreStopwatchStatesCompanion.insert( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + stoppedAt: stoppedAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$ActiveScoreStopwatchStatesTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({activeWorkoutSessionId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: + < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (activeWorkoutSessionId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.activeWorkoutSessionId, + referencedTable: + $$ActiveScoreStopwatchStatesTableReferences + ._activeWorkoutSessionIdTable(db), + referencedColumn: + $$ActiveScoreStopwatchStatesTableReferences + ._activeWorkoutSessionIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$ActiveScoreStopwatchStatesTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ActiveScoreStopwatchStatesTable, + ActiveScoreStopwatchState, + $$ActiveScoreStopwatchStatesTableFilterComposer, + $$ActiveScoreStopwatchStatesTableOrderingComposer, + $$ActiveScoreStopwatchStatesTableAnnotationComposer, + $$ActiveScoreStopwatchStatesTableCreateCompanionBuilder, + $$ActiveScoreStopwatchStatesTableUpdateCompanionBuilder, + (ActiveScoreStopwatchState, $$ActiveScoreStopwatchStatesTableReferences), + ActiveScoreStopwatchState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + >; typedef $$ActiveSetResultsTableCreateCompanionBuilder = ActiveSetResultsCompanion Function({ required String id, @@ -18199,6 +20608,8 @@ typedef $$ActiveSetResultsTableCreateCompanionBuilder = Value actualTimeMs, Value actualReps, Value actualScore, + Value actualScoreTimeMs, + Value scoreInputModeSnapshot, Value scoreLabelSnapshot, Value scoreUnitSnapshot, Value note, @@ -18229,6 +20640,8 @@ typedef $$ActiveSetResultsTableUpdateCompanionBuilder = Value actualTimeMs, Value actualReps, Value actualScore, + Value actualScoreTimeMs, + Value scoreInputModeSnapshot, Value scoreLabelSnapshot, Value scoreUnitSnapshot, Value note, @@ -18382,6 +20795,16 @@ class $$ActiveSetResultsTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnFilters(column), @@ -18541,6 +20964,16 @@ class $$ActiveSetResultsTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnOrderings(column), @@ -18686,6 +21119,16 @@ class $$ActiveSetResultsTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => column, @@ -18779,6 +21222,8 @@ class $$ActiveSetResultsTableTableManager Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value note = const Value.absent(), @@ -18807,6 +21252,8 @@ class $$ActiveSetResultsTableTableManager actualTimeMs: actualTimeMs, actualReps: actualReps, actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + scoreInputModeSnapshot: scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, note: note, @@ -18837,6 +21284,8 @@ class $$ActiveSetResultsTableTableManager Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value note = const Value.absent(), @@ -18865,6 +21314,8 @@ class $$ActiveSetResultsTableTableManager actualTimeMs: actualTimeMs, actualReps: actualReps, actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + scoreInputModeSnapshot: scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, note: note, @@ -20187,6 +22638,7 @@ typedef $$ExercisesTableCreateCompanionBuilder = required bool hasTimeMeasure, required bool hasRepsMeasure, required bool hasScoreMeasure, + Value scoreInputMode, Value scoreLabel, Value scoreUnit, Value archivedAt, @@ -20212,6 +22664,7 @@ typedef $$ExercisesTableUpdateCompanionBuilder = Value hasTimeMeasure, Value hasRepsMeasure, Value hasScoreMeasure, + Value scoreInputMode, Value scoreLabel, Value scoreUnit, Value archivedAt, @@ -20366,6 +22819,11 @@ class $$ExercisesTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get scoreInputMode => $composableBuilder( + column: $table.scoreInputMode, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get scoreLabel => $composableBuilder( column: $table.scoreLabel, builder: (column) => ColumnFilters(column), @@ -20542,6 +23000,11 @@ class $$ExercisesTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get scoreInputMode => $composableBuilder( + column: $table.scoreInputMode, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get scoreLabel => $composableBuilder( column: $table.scoreLabel, builder: (column) => ColumnOrderings(column), @@ -20681,6 +23144,11 @@ class $$ExercisesTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get scoreInputMode => $composableBuilder( + column: $table.scoreInputMode, + builder: (column) => column, + ); + GeneratedColumn get scoreLabel => $composableBuilder( column: $table.scoreLabel, builder: (column) => column, @@ -20816,6 +23284,7 @@ class $$ExercisesTableTableManager Value hasTimeMeasure = const Value.absent(), Value hasRepsMeasure = const Value.absent(), Value hasScoreMeasure = const Value.absent(), + Value scoreInputMode = const Value.absent(), Value scoreLabel = const Value.absent(), Value scoreUnit = const Value.absent(), Value archivedAt = const Value.absent(), @@ -20839,6 +23308,7 @@ class $$ExercisesTableTableManager hasTimeMeasure: hasTimeMeasure, hasRepsMeasure: hasRepsMeasure, hasScoreMeasure: hasScoreMeasure, + scoreInputMode: scoreInputMode, scoreLabel: scoreLabel, scoreUnit: scoreUnit, archivedAt: archivedAt, @@ -20864,6 +23334,7 @@ class $$ExercisesTableTableManager required bool hasTimeMeasure, required bool hasRepsMeasure, required bool hasScoreMeasure, + Value scoreInputMode = const Value.absent(), Value scoreLabel = const Value.absent(), Value scoreUnit = const Value.absent(), Value archivedAt = const Value.absent(), @@ -20887,6 +23358,7 @@ class $$ExercisesTableTableManager hasTimeMeasure: hasTimeMeasure, hasRepsMeasure: hasRepsMeasure, hasScoreMeasure: hasScoreMeasure, + scoreInputMode: scoreInputMode, scoreLabel: scoreLabel, scoreUnit: scoreUnit, archivedAt: archivedAt, @@ -21615,6 +24087,7 @@ typedef $$ProgramExercisesTableCreateCompanionBuilder = required bool availableTimeSnapshot, required bool availableRepsSnapshot, required bool availableScoreSnapshot, + Value scoreInputModeSnapshot, Value scoreLabelSnapshot, Value scoreUnitSnapshot, required int setsCount, @@ -21624,6 +24097,7 @@ typedef $$ProgramExercisesTableCreateCompanionBuilder = Value targetTimeSeconds, Value targetReps, Value targetScore, + Value targetScoreTimeMs, Value restSecondsOverride, Value rowid, }); @@ -21651,6 +24125,7 @@ typedef $$ProgramExercisesTableUpdateCompanionBuilder = Value availableTimeSnapshot, Value availableRepsSnapshot, Value availableScoreSnapshot, + Value scoreInputModeSnapshot, Value scoreLabelSnapshot, Value scoreUnitSnapshot, Value setsCount, @@ -21660,6 +24135,7 @@ typedef $$ProgramExercisesTableUpdateCompanionBuilder = Value targetTimeSeconds, Value targetReps, Value targetScore, + Value targetScoreTimeMs, Value restSecondsOverride, Value rowid, }); @@ -21852,6 +24328,11 @@ class $$ProgramExercisesTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnFilters(column), @@ -21897,6 +24378,11 @@ class $$ProgramExercisesTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get targetScoreTimeMs => $composableBuilder( + column: $table.targetScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get restSecondsOverride => $composableBuilder( column: $table.restSecondsOverride, builder: (column) => ColumnFilters(column), @@ -22094,6 +24580,11 @@ class $$ProgramExercisesTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnOrderings(column), @@ -22139,6 +24630,11 @@ class $$ProgramExercisesTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get targetScoreTimeMs => $composableBuilder( + column: $table.targetScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get restSecondsOverride => $composableBuilder( column: $table.restSecondsOverride, builder: (column) => ColumnOrderings(column), @@ -22324,6 +24820,11 @@ class $$ProgramExercisesTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => column, @@ -22367,6 +24868,11 @@ class $$ProgramExercisesTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get targetScoreTimeMs => $composableBuilder( + column: $table.targetScoreTimeMs, + builder: (column) => column, + ); + GeneratedColumn get restSecondsOverride => $composableBuilder( column: $table.restSecondsOverride, builder: (column) => column, @@ -22525,6 +25031,7 @@ class $$ProgramExercisesTableTableManager Value availableTimeSnapshot = const Value.absent(), Value availableRepsSnapshot = const Value.absent(), Value availableScoreSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value setsCount = const Value.absent(), @@ -22534,6 +25041,7 @@ class $$ProgramExercisesTableTableManager Value targetTimeSeconds = const Value.absent(), Value targetReps = const Value.absent(), Value targetScore = const Value.absent(), + Value targetScoreTimeMs = const Value.absent(), Value restSecondsOverride = const Value.absent(), Value rowid = const Value.absent(), }) => ProgramExercisesCompanion( @@ -22559,6 +25067,7 @@ class $$ProgramExercisesTableTableManager availableTimeSnapshot: availableTimeSnapshot, availableRepsSnapshot: availableRepsSnapshot, availableScoreSnapshot: availableScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, setsCount: setsCount, @@ -22568,6 +25077,7 @@ class $$ProgramExercisesTableTableManager targetTimeSeconds: targetTimeSeconds, targetReps: targetReps, targetScore: targetScore, + targetScoreTimeMs: targetScoreTimeMs, restSecondsOverride: restSecondsOverride, rowid: rowid, ), @@ -22598,6 +25108,7 @@ class $$ProgramExercisesTableTableManager required bool availableTimeSnapshot, required bool availableRepsSnapshot, required bool availableScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), required int setsCount, @@ -22607,6 +25118,7 @@ class $$ProgramExercisesTableTableManager Value targetTimeSeconds = const Value.absent(), Value targetReps = const Value.absent(), Value targetScore = const Value.absent(), + Value targetScoreTimeMs = const Value.absent(), Value restSecondsOverride = const Value.absent(), Value rowid = const Value.absent(), }) => ProgramExercisesCompanion.insert( @@ -22632,6 +25144,7 @@ class $$ProgramExercisesTableTableManager availableTimeSnapshot: availableTimeSnapshot, availableRepsSnapshot: availableRepsSnapshot, availableScoreSnapshot: availableScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, setsCount: setsCount, @@ -22641,6 +25154,7 @@ class $$ProgramExercisesTableTableManager targetTimeSeconds: targetTimeSeconds, targetReps: targetReps, targetScore: targetScore, + targetScoreTimeMs: targetScoreTimeMs, restSecondsOverride: restSecondsOverride, rowid: rowid, ), @@ -23647,12 +26161,15 @@ typedef $$WorkoutHistorySetResultsTableCreateCompanionBuilder = required bool timeEnabledSnapshot, required bool repsEnabledSnapshot, required bool scoreEnabledSnapshot, + Value scoreInputModeSnapshot, Value targetTimeSecondsSnapshot, Value targetRepsSnapshot, Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, Value actualTimeMs, Value actualReps, Value actualScore, + Value actualScoreTimeMs, Value scoreLabelSnapshot, Value scoreUnitSnapshot, Value startedAt, @@ -23684,12 +26201,15 @@ typedef $$WorkoutHistorySetResultsTableUpdateCompanionBuilder = Value timeEnabledSnapshot, Value repsEnabledSnapshot, Value scoreEnabledSnapshot, + Value scoreInputModeSnapshot, Value targetTimeSecondsSnapshot, Value targetRepsSnapshot, Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, Value actualTimeMs, Value actualReps, Value actualScore, + Value actualScoreTimeMs, Value scoreLabelSnapshot, Value scoreUnitSnapshot, Value startedAt, @@ -23845,6 +26365,11 @@ class $$WorkoutHistorySetResultsTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get targetTimeSecondsSnapshot => $composableBuilder( column: $table.targetTimeSecondsSnapshot, builder: (column) => ColumnFilters(column), @@ -23860,6 +26385,11 @@ class $$WorkoutHistorySetResultsTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get actualTimeMs => $composableBuilder( column: $table.actualTimeMs, builder: (column) => ColumnFilters(column), @@ -23875,6 +26405,11 @@ class $$WorkoutHistorySetResultsTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + ColumnFilters get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnFilters(column), @@ -24038,6 +26573,11 @@ class $$WorkoutHistorySetResultsTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get targetTimeSecondsSnapshot => $composableBuilder( column: $table.targetTimeSecondsSnapshot, builder: (column) => ColumnOrderings(column), @@ -24053,6 +26593,11 @@ class $$WorkoutHistorySetResultsTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get actualTimeMs => $composableBuilder( column: $table.actualTimeMs, builder: (column) => ColumnOrderings(column), @@ -24068,6 +26613,11 @@ class $$WorkoutHistorySetResultsTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + ColumnOrderings get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => ColumnOrderings(column), @@ -24219,6 +26769,11 @@ class $$WorkoutHistorySetResultsTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + GeneratedColumn get targetTimeSecondsSnapshot => $composableBuilder( column: $table.targetTimeSecondsSnapshot, builder: (column) => column, @@ -24234,6 +26789,11 @@ class $$WorkoutHistorySetResultsTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + builder: (column) => column, + ); + GeneratedColumn get actualTimeMs => $composableBuilder( column: $table.actualTimeMs, builder: (column) => column, @@ -24249,6 +26809,11 @@ class $$WorkoutHistorySetResultsTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( column: $table.scoreLabelSnapshot, builder: (column) => column, @@ -24355,12 +26920,15 @@ class $$WorkoutHistorySetResultsTableTableManager Value timeEnabledSnapshot = const Value.absent(), Value repsEnabledSnapshot = const Value.absent(), Value scoreEnabledSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), Value targetTimeSecondsSnapshot = const Value.absent(), Value targetRepsSnapshot = const Value.absent(), Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value startedAt = const Value.absent(), @@ -24390,12 +26958,15 @@ class $$WorkoutHistorySetResultsTableTableManager timeEnabledSnapshot: timeEnabledSnapshot, repsEnabledSnapshot: repsEnabledSnapshot, scoreEnabledSnapshot: scoreEnabledSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, targetTimeSecondsSnapshot: targetTimeSecondsSnapshot, targetRepsSnapshot: targetRepsSnapshot, targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, actualTimeMs: actualTimeMs, actualReps: actualReps, actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, startedAt: startedAt, @@ -24427,12 +26998,15 @@ class $$WorkoutHistorySetResultsTableTableManager required bool timeEnabledSnapshot, required bool repsEnabledSnapshot, required bool scoreEnabledSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), Value targetTimeSecondsSnapshot = const Value.absent(), Value targetRepsSnapshot = const Value.absent(), Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), Value actualTimeMs = const Value.absent(), Value actualReps = const Value.absent(), Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), Value scoreLabelSnapshot = const Value.absent(), Value scoreUnitSnapshot = const Value.absent(), Value startedAt = const Value.absent(), @@ -24462,12 +27036,15 @@ class $$WorkoutHistorySetResultsTableTableManager timeEnabledSnapshot: timeEnabledSnapshot, repsEnabledSnapshot: repsEnabledSnapshot, scoreEnabledSnapshot: scoreEnabledSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, targetTimeSecondsSnapshot: targetTimeSecondsSnapshot, targetRepsSnapshot: targetRepsSnapshot, targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, actualTimeMs: actualTimeMs, actualReps: actualReps, actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, scoreLabelSnapshot: scoreLabelSnapshot, scoreUnitSnapshot: scoreUnitSnapshot, startedAt: startedAt, @@ -25371,6 +27948,7 @@ typedef $$WorkoutTemplateExerciseOverridesTableCreateCompanionBuilder = Value targetTimeSecondsOverride, Value targetRepsOverride, Value targetScoreOverride, + Value targetScoreTimeMsOverride, Value rowid, }); typedef $$WorkoutTemplateExerciseOverridesTableUpdateCompanionBuilder = @@ -25392,6 +27970,7 @@ typedef $$WorkoutTemplateExerciseOverridesTableUpdateCompanionBuilder = Value targetTimeSecondsOverride, Value targetRepsOverride, Value targetScoreOverride, + Value targetScoreTimeMsOverride, Value rowid, }); @@ -25521,6 +28100,11 @@ class $$WorkoutTemplateExerciseOverridesTableFilterComposer builder: (column) => ColumnFilters(column), ); + ColumnFilters get targetScoreTimeMsOverride => $composableBuilder( + column: $table.targetScoreTimeMsOverride, + builder: (column) => ColumnFilters(column), + ); + $$WorkoutTemplateProgramsTableFilterComposer get workoutTemplateProgramId { final $$WorkoutTemplateProgramsTableFilterComposer composer = $composerBuilder( @@ -25635,6 +28219,11 @@ class $$WorkoutTemplateExerciseOverridesTableOrderingComposer builder: (column) => ColumnOrderings(column), ); + ColumnOrderings get targetScoreTimeMsOverride => $composableBuilder( + column: $table.targetScoreTimeMsOverride, + builder: (column) => ColumnOrderings(column), + ); + $$WorkoutTemplateProgramsTableOrderingComposer get workoutTemplateProgramId { final $$WorkoutTemplateProgramsTableOrderingComposer composer = $composerBuilder( @@ -25739,6 +28328,11 @@ class $$WorkoutTemplateExerciseOverridesTableAnnotationComposer builder: (column) => column, ); + GeneratedColumn get targetScoreTimeMsOverride => $composableBuilder( + column: $table.targetScoreTimeMsOverride, + builder: (column) => column, + ); + $$WorkoutTemplateProgramsTableAnnotationComposer get workoutTemplateProgramId { final $$WorkoutTemplateProgramsTableAnnotationComposer composer = @@ -25824,6 +28418,7 @@ class $$WorkoutTemplateExerciseOverridesTableTableManager Value targetTimeSecondsOverride = const Value.absent(), Value targetRepsOverride = const Value.absent(), Value targetScoreOverride = const Value.absent(), + Value targetScoreTimeMsOverride = const Value.absent(), Value rowid = const Value.absent(), }) => WorkoutTemplateExerciseOverridesCompanion( id: id, @@ -25843,6 +28438,7 @@ class $$WorkoutTemplateExerciseOverridesTableTableManager targetTimeSecondsOverride: targetTimeSecondsOverride, targetRepsOverride: targetRepsOverride, targetScoreOverride: targetScoreOverride, + targetScoreTimeMsOverride: targetScoreTimeMsOverride, rowid: rowid, ), createCompanionCallback: @@ -25864,6 +28460,7 @@ class $$WorkoutTemplateExerciseOverridesTableTableManager Value targetTimeSecondsOverride = const Value.absent(), Value targetRepsOverride = const Value.absent(), Value targetScoreOverride = const Value.absent(), + Value targetScoreTimeMsOverride = const Value.absent(), Value rowid = const Value.absent(), }) => WorkoutTemplateExerciseOverridesCompanion.insert( id: id, @@ -25883,6 +28480,7 @@ class $$WorkoutTemplateExerciseOverridesTableTableManager targetTimeSecondsOverride: targetTimeSecondsOverride, targetRepsOverride: targetRepsOverride, targetScoreOverride: targetScoreOverride, + targetScoreTimeMsOverride: targetScoreTimeMsOverride, rowid: rowid, ), withReferenceMapper: (p0) => p0 @@ -25971,6 +28569,12 @@ class $AppDatabaseManager { $$ActiveWorkoutSessionsTableTableManager(_db, _db.activeWorkoutSessions); $$ActiveRestStatesTableTableManager get activeRestStates => $$ActiveRestStatesTableTableManager(_db, _db.activeRestStates); + $$ActiveScoreStopwatchStatesTableTableManager + get activeScoreStopwatchStates => + $$ActiveScoreStopwatchStatesTableTableManager( + _db, + _db.activeScoreStopwatchStates, + ); $$ActiveSetResultsTableTableManager get activeSetResults => $$ActiveSetResultsTableTableManager(_db, _db.activeSetResults); $$ChangeLogEntriesTableTableManager get changeLogEntries => diff --git a/lib/infrastructure/local/drift_repositories.dart b/lib/infrastructure/local/drift_repositories.dart index f479db5..8d5444a 100644 --- a/lib/infrastructure/local/drift_repositories.dart +++ b/lib/infrastructure/local/drift_repositories.dart @@ -469,6 +469,77 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { return row == null ? null : _activeRestStateFromRow(row); } + @override + Future saveScoreStopwatchState( + domain.ActiveScoreStopwatchState state, + ) async { + await _upsertWithChangeLog( + database: database, + tableName: 'active_score_stopwatch_states', + entityType: 'ActiveScoreStopwatchState', + metadata: state.metadata, + write: () => database + .into(database.activeScoreStopwatchStates) + .insertOnConflictUpdate(_activeScoreStopwatchStateCompanion(state)), + ); + } + + @override + Future deleteScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required DateTime deletedAt, + }) async { + final row = + await (database.select(database.activeScoreStopwatchStates)..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.programIndex.equals(programIndex) & + table.exerciseIndex.equals(exerciseIndex) & + table.setIndex.equals(setIndex) & + table.deletedAt.isNull(), + )) + .getSingleOrNull(); + if (row == null) { + return; + } + final revision = row.localRevision + 1; + await (database.delete( + database.activeScoreStopwatchStates, + )..where((table) => table.id.equals(row.id))).go(); + await _writeChangeLog( + database: database, + entityType: 'ActiveScoreStopwatchState', + entityId: row.id, + operation: 'delete', + localRevision: revision, + originDeviceId: row.originDeviceId, + createdAt: deletedAt, + ); + } + + @override + Future findScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final row = + await (database.select(database.activeScoreStopwatchStates)..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.programIndex.equals(programIndex) & + table.exerciseIndex.equals(exerciseIndex) & + table.setIndex.equals(setIndex) & + table.deletedAt.isNull(), + )) + .getSingleOrNull(); + return row == null ? null : _activeScoreStopwatchStateFromRow(row); + } + @override Future> listSetResults(String sessionId) async { final rows = @@ -492,6 +563,26 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { .get(); return rows.map(_activeRestStateFromRow).toList(); } + + @override + Future> listScoreStopwatchStates( + String sessionId, + ) async { + final rows = + await (database.select(database.activeScoreStopwatchStates) + ..where( + (table) => + table.activeWorkoutSessionId.equals(sessionId) & + table.deletedAt.isNull(), + ) + ..orderBy([ + (table) => OrderingTerm.asc(table.programIndex), + (table) => OrderingTerm.asc(table.exerciseIndex), + (table) => OrderingTerm.asc(table.setIndex), + ])) + .get(); + return rows.map(_activeScoreStopwatchStateFromRow).toList(); + } } final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { @@ -872,6 +963,7 @@ db.ExercisesCompanion _exerciseCompanion(domain.Exercise exercise) { hasTimeMeasure: Value(exercise.hasTimeMeasure), hasRepsMeasure: Value(exercise.hasRepsMeasure), hasScoreMeasure: Value(exercise.hasScoreMeasure), + scoreInputMode: Value(_scoreInputModeToDb(exercise.scoreInputMode)), scoreLabel: Value(exercise.scoreLabel), scoreUnit: Value(exercise.scoreUnit), archivedAt: Value(_utcOrNull(exercise.archivedAt)), @@ -888,6 +980,7 @@ domain.Exercise _exerciseFromRow(db.Exercise row) { hasTimeMeasure: row.hasTimeMeasure, hasRepsMeasure: row.hasRepsMeasure, hasScoreMeasure: row.hasScoreMeasure, + scoreInputMode: _scoreInputModeFromDb(row.scoreInputMode), scoreLabel: row.scoreLabel, scoreUnit: row.scoreUnit, archivedAt: _utcOrNull(row.archivedAt), @@ -995,6 +1088,9 @@ db.ProgramExercisesCompanion _programExerciseCompanion( availableTimeSnapshot: Value(exercise.availableTimeSnapshot), availableRepsSnapshot: Value(exercise.availableRepsSnapshot), availableScoreSnapshot: Value(exercise.availableScoreSnapshot), + scoreInputModeSnapshot: Value( + _scoreInputModeToDb(exercise.scoreInputModeSnapshot), + ), scoreLabelSnapshot: Value(exercise.scoreLabelSnapshot), scoreUnitSnapshot: Value(exercise.scoreUnitSnapshot), setsCount: Value(exercise.setsCount), @@ -1004,6 +1100,7 @@ db.ProgramExercisesCompanion _programExerciseCompanion( targetTimeSeconds: Value(exercise.targetTimeSeconds), targetReps: Value(exercise.targetReps), targetScore: Value(exercise.targetScore), + targetScoreTimeMs: Value(exercise.targetScoreTimeMs), restSecondsOverride: Value(exercise.restSecondsOverride), ); } @@ -1022,6 +1119,7 @@ domain.ProgramExercise _programExerciseFromRow(db.ProgramExercise row) { availableTimeSnapshot: row.availableTimeSnapshot, availableRepsSnapshot: row.availableRepsSnapshot, availableScoreSnapshot: row.availableScoreSnapshot, + scoreInputModeSnapshot: _scoreInputModeFromDb(row.scoreInputModeSnapshot), scoreLabelSnapshot: row.scoreLabelSnapshot, scoreUnitSnapshot: row.scoreUnitSnapshot, setsCount: row.setsCount, @@ -1031,6 +1129,7 @@ domain.ProgramExercise _programExerciseFromRow(db.ProgramExercise row) { targetTimeSeconds: row.targetTimeSeconds, targetReps: row.targetReps, targetScore: row.targetScore, + targetScoreTimeMs: row.targetScoreTimeMs, restSecondsOverride: row.restSecondsOverride, ); } @@ -1132,6 +1231,7 @@ _workoutTemplateExerciseOverrideCompanion( targetTimeSecondsOverride: Value(override.targetTimeSecondsOverride), targetRepsOverride: Value(override.targetRepsOverride), targetScoreOverride: Value(override.targetScoreOverride), + targetScoreTimeMsOverride: Value(override.targetScoreTimeMsOverride), ); } @@ -1146,6 +1246,7 @@ domain.WorkoutTemplateExerciseOverride _workoutTemplateExerciseOverrideFromRow( targetTimeSecondsOverride: row.targetTimeSecondsOverride, targetRepsOverride: row.targetRepsOverride, targetScoreOverride: row.targetScoreOverride, + targetScoreTimeMsOverride: row.targetScoreTimeMsOverride, ); } @@ -1225,6 +1326,10 @@ db.ActiveSetResultsCompanion _activeSetResultCompanion( actualTimeMs: Value(result.actualTimeMs), actualReps: Value(result.actualReps), actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), + scoreInputModeSnapshot: Value( + _scoreInputModeToDb(result.scoreInputModeSnapshot), + ), scoreLabelSnapshot: Value(result.scoreLabelSnapshot), scoreUnitSnapshot: Value(result.scoreUnitSnapshot), note: Value(result.note), @@ -1246,6 +1351,8 @@ domain.ActiveSetResult _activeSetResultFromRow(db.ActiveSetResult row) { actualTimeMs: row.actualTimeMs, actualReps: row.actualReps, actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, + scoreInputModeSnapshot: _scoreInputModeFromDb(row.scoreInputModeSnapshot), scoreLabelSnapshot: row.scoreLabelSnapshot, scoreUnitSnapshot: row.scoreUnitSnapshot, note: row.note, @@ -1296,6 +1403,49 @@ domain.ActiveRestState _activeRestStateFromRow(db.ActiveRestState row) { ); } +db.ActiveScoreStopwatchStatesCompanion _activeScoreStopwatchStateCompanion( + domain.ActiveScoreStopwatchState state, +) { + final values = _metadataValues(state.metadata); + return db.ActiveScoreStopwatchStatesCompanion( + id: values[0] as Value, + createdAt: values[1] as Value, + updatedAt: values[2] as Value, + deletedAt: values[3] as Value, + schemaVersion: values[4] as Value, + syncState: values[5] as Value, + localRevision: values[6] as Value, + originDeviceId: values[7] as Value, + futureOwnerProfileId: values[8] as Value, + lastSyncedAt: values[9] as Value, + remoteRevision: values[10] as Value, + activeWorkoutSessionId: Value(state.activeWorkoutSessionId), + programIndex: Value(state.programIndex), + exerciseIndex: Value(state.exerciseIndex), + setIndex: Value(state.setIndex), + status: Value(_scoreStopwatchStatusToDb(state.status)), + startedAt: Value(state.startedAt.toUtc()), + accumulatedMs: Value(state.accumulatedMs), + stoppedAt: Value(_utcOrNull(state.stoppedAt)), + ); +} + +domain.ActiveScoreStopwatchState _activeScoreStopwatchStateFromRow( + db.ActiveScoreStopwatchState row, +) { + return domain.ActiveScoreStopwatchState( + metadata: _metadataFromRow(row), + activeWorkoutSessionId: row.activeWorkoutSessionId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + status: _scoreStopwatchStatusFromDb(row.status), + startedAt: _utc(row.startedAt), + accumulatedMs: row.accumulatedMs, + stoppedAt: _utcOrNull(row.stoppedAt), + ); +} + db.WorkoutHistoriesCompanion _workoutHistoryCompanion( domain.WorkoutHistory history, ) { @@ -1350,12 +1500,17 @@ db.WorkoutHistorySetResultsCompanion _workoutHistorySetResultCompanion( timeEnabledSnapshot: Value(result.timeEnabledSnapshot), repsEnabledSnapshot: Value(result.repsEnabledSnapshot), scoreEnabledSnapshot: Value(result.scoreEnabledSnapshot), + scoreInputModeSnapshot: Value( + _scoreInputModeToDb(result.scoreInputModeSnapshot), + ), targetTimeSecondsSnapshot: Value(result.targetTimeSecondsSnapshot), targetRepsSnapshot: Value(result.targetRepsSnapshot), targetScoreSnapshot: Value(result.targetScoreSnapshot), + targetScoreTimeMsSnapshot: Value(result.targetScoreTimeMsSnapshot), actualTimeMs: Value(result.actualTimeMs), actualReps: Value(result.actualReps), actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), scoreLabelSnapshot: Value(result.scoreLabelSnapshot), scoreUnitSnapshot: Value(result.scoreUnitSnapshot), startedAt: Value(_utcOrNull(result.startedAt)), @@ -1398,12 +1553,15 @@ domain.WorkoutHistorySetResult _workoutHistorySetResultFromRow( timeEnabledSnapshot: row.timeEnabledSnapshot, repsEnabledSnapshot: row.repsEnabledSnapshot, scoreEnabledSnapshot: row.scoreEnabledSnapshot, + scoreInputModeSnapshot: _scoreInputModeFromDb(row.scoreInputModeSnapshot), targetTimeSecondsSnapshot: row.targetTimeSecondsSnapshot, targetRepsSnapshot: row.targetRepsSnapshot, targetScoreSnapshot: row.targetScoreSnapshot, + targetScoreTimeMsSnapshot: row.targetScoreTimeMsSnapshot, actualTimeMs: row.actualTimeMs, actualReps: row.actualReps, actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, scoreLabelSnapshot: row.scoreLabelSnapshot, scoreUnitSnapshot: row.scoreUnitSnapshot, startedAt: _utcOrNull(row.startedAt), @@ -1446,6 +1604,17 @@ domain.MediaKind _mediaKindFromDb(String value) => switch (value) { _ => throw domain.DomainException('Unknown media kind: $value'), }; +String _scoreInputModeToDb(domain.ScoreInputMode mode) => switch (mode) { + domain.ScoreInputMode.manual => 'manual', + domain.ScoreInputMode.stopwatch => 'stopwatch', +}; + +domain.ScoreInputMode _scoreInputModeFromDb(String value) => switch (value) { + 'manual' => domain.ScoreInputMode.manual, + 'stopwatch' => domain.ScoreInputMode.stopwatch, + _ => throw domain.DomainException('Unknown score input mode: $value'), +}; + String _setResultStatusToDb(domain.SetResultStatus status) => switch (status) { domain.SetResultStatus.completed => 'completed', domain.SetResultStatus.skipped => 'skipped', @@ -1457,6 +1626,21 @@ domain.SetResultStatus _setResultStatusFromDb(String value) => switch (value) { _ => throw domain.DomainException('Unknown set result status: $value'), }; +String _scoreStopwatchStatusToDb(domain.ActiveScoreStopwatchStatus status) => + switch (status) { + domain.ActiveScoreStopwatchStatus.running => 'running', + domain.ActiveScoreStopwatchStatus.stopped => 'stopped', + }; + +domain.ActiveScoreStopwatchStatus _scoreStopwatchStatusFromDb(String value) => + switch (value) { + 'running' => domain.ActiveScoreStopwatchStatus.running, + 'stopped' => domain.ActiveScoreStopwatchStatus.stopped, + _ => throw domain.DomainException( + 'Unknown active score stopwatch status: $value', + ), + }; + domain.ActiveWorkoutStatus _activeStatusFromDb(String value) => switch (value) { 'running' => domain.ActiveWorkoutStatus.running, 'paused' => domain.ActiveWorkoutStatus.paused, diff --git a/lib/infrastructure/local/tables.dart b/lib/infrastructure/local/tables.dart index a7ae9d8..399ecfe 100644 --- a/lib/infrastructure/local/tables.dart +++ b/lib/infrastructure/local/tables.dart @@ -65,6 +65,8 @@ class Exercises extends SyncableTable { BoolColumn get hasTimeMeasure => boolean()(); BoolColumn get hasRepsMeasure => boolean()(); BoolColumn get hasScoreMeasure => boolean()(); + TextColumn get scoreInputMode => + text().withDefault(const Constant('manual'))(); TextColumn get scoreLabel => text().nullable()(); TextColumn get scoreUnit => text().nullable()(); DateTimeColumn get archivedAt => dateTime().nullable()(); @@ -72,9 +74,11 @@ class Exercises extends SyncableTable { @override List get customConstraints => [ 'CHECK (has_time_measure OR has_reps_measure OR has_score_measure)', - 'CHECK (NOT has_score_measure OR (score_label IS NOT NULL ' - 'AND length(trim(score_label)) > 0 AND score_unit IS NOT NULL ' - 'AND length(trim(score_unit)) > 0))', + "CHECK (score_input_mode IN ('manual', 'stopwatch'))", + "CHECK (has_score_measure OR score_input_mode = 'manual')", + "CHECK (score_input_mode != 'manual' OR NOT has_score_measure OR " + '(score_label IS NOT NULL AND length(trim(score_label)) > 0 ' + 'AND score_unit IS NOT NULL AND length(trim(score_unit)) > 0))', ]; } @@ -111,6 +115,8 @@ class ProgramExercises extends SyncableTable { BoolColumn get availableTimeSnapshot => boolean()(); BoolColumn get availableRepsSnapshot => boolean()(); BoolColumn get availableScoreSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => + text().withDefault(const Constant('manual'))(); TextColumn get scoreLabelSnapshot => text().nullable()(); TextColumn get scoreUnitSnapshot => text().nullable()(); IntColumn get setsCount => integer()(); @@ -120,6 +126,7 @@ class ProgramExercises extends SyncableTable { IntColumn get targetTimeSeconds => integer().nullable()(); IntColumn get targetReps => integer().nullable()(); RealColumn get targetScore => real().nullable()(); + IntColumn get targetScoreTimeMs => integer().nullable()(); IntColumn get restSecondsOverride => integer().nullable()(); @override @@ -134,11 +141,18 @@ class ProgramExercises extends SyncableTable { 'CHECK (target_time_seconds IS NULL OR target_time_seconds > 0)', 'CHECK (target_reps IS NULL OR target_reps > 0)', 'CHECK (target_score IS NULL OR target_score >= 0)', + 'CHECK (target_score_time_ms IS NULL OR target_score_time_ms > 0)', 'CHECK (rest_seconds_override IS NULL OR rest_seconds_override >= 0)', 'CHECK (target_time_seconds IS NULL OR time_enabled)', 'CHECK (target_reps IS NULL OR reps_enabled)', - 'CHECK (target_score IS NULL OR score_enabled)', - 'CHECK (NOT available_score_snapshot OR (score_label_snapshot ' + "CHECK (score_input_mode_snapshot IN ('manual', 'stopwatch'))", + 'CHECK (target_score IS NULL OR ' + "(score_enabled AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms IS NULL OR ' + "(score_enabled AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (target_score IS NULL OR target_score_time_ms IS NULL)', + "CHECK (score_input_mode_snapshot != 'manual' OR " + 'NOT available_score_snapshot OR (score_label_snapshot ' 'IS NOT NULL AND length(trim(score_label_snapshot)) > 0 ' 'AND score_unit_snapshot IS NOT NULL ' 'AND length(trim(score_unit_snapshot)) > 0))', @@ -185,6 +199,7 @@ class WorkoutTemplateExerciseOverrides extends SyncableTable { IntColumn get targetTimeSecondsOverride => integer().nullable()(); IntColumn get targetRepsOverride => integer().nullable()(); RealColumn get targetScoreOverride => real().nullable()(); + IntColumn get targetScoreTimeMsOverride => integer().nullable()(); @override List get customConstraints => [ @@ -194,6 +209,10 @@ class WorkoutTemplateExerciseOverrides extends SyncableTable { 'target_time_seconds_override > 0)', 'CHECK (target_reps_override IS NULL OR target_reps_override > 0)', 'CHECK (target_score_override IS NULL OR target_score_override >= 0)', + 'CHECK (target_score_time_ms_override IS NULL OR ' + 'target_score_time_ms_override > 0)', + 'CHECK (target_score_override IS NULL OR ' + 'target_score_time_ms_override IS NULL)', ]; } @@ -241,6 +260,9 @@ class ActiveSetResults extends SyncableTable { IntColumn get actualTimeMs => integer().nullable()(); IntColumn get actualReps => integer().nullable()(); RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); + TextColumn get scoreInputModeSnapshot => + text().withDefault(const Constant('manual'))(); TextColumn get scoreLabelSnapshot => text().nullable()(); TextColumn get scoreUnitSnapshot => text().nullable()(); TextColumn get note => text().nullable()(); @@ -256,9 +278,17 @@ class ActiveSetResults extends SyncableTable { 'CHECK (actual_time_ms IS NULL OR actual_time_ms >= 0)', 'CHECK (actual_reps IS NULL OR actual_reps >= 0)', 'CHECK (actual_score IS NULL OR actual_score >= 0)', + 'CHECK (actual_score_time_ms IS NULL OR actual_score_time_ms >= 0)', "CHECK (status IN ('completed', 'skipped'))", 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' - 'AND actual_reps IS NULL AND actual_score IS NULL))', + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + "CHECK (score_input_mode_snapshot IN ('manual', 'stopwatch'))", + 'CHECK (actual_score IS NULL OR ' + "score_input_mode_snapshot = 'manual')", + 'CHECK (actual_score_time_ms IS NULL OR ' + "score_input_mode_snapshot = 'stopwatch')", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', 'CHECK (actual_score IS NULL OR (score_label_snapshot IS NOT NULL ' 'AND length(trim(score_label_snapshot)) > 0 ' 'AND score_unit_snapshot IS NOT NULL ' @@ -266,6 +296,32 @@ class ActiveSetResults extends SyncableTable { ]; } +class ActiveScoreStopwatchStates extends SyncableTable { + @override + String get tableName => 'active_score_stopwatch_states'; + + TextColumn get activeWorkoutSessionId => + text().references(ActiveWorkoutSessions, #id)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime()(); + IntColumn get accumulatedMs => integer()(); + DateTimeColumn get stoppedAt => dateTime().nullable()(); + + @override + List get customConstraints => [ + 'UNIQUE (active_workout_session_id, program_index, exercise_index, ' + 'set_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + "CHECK (status IN ('running', 'stopped'))", + 'CHECK (accumulated_ms >= 0)', + ]; +} + class ActiveRestStates extends SyncableTable { @override String get tableName => 'active_rest_states'; @@ -326,12 +382,16 @@ class WorkoutHistorySetResults extends SyncableTable { BoolColumn get timeEnabledSnapshot => boolean()(); BoolColumn get repsEnabledSnapshot => boolean()(); BoolColumn get scoreEnabledSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => + text().withDefault(const Constant('manual'))(); IntColumn get targetTimeSecondsSnapshot => integer().nullable()(); IntColumn get targetRepsSnapshot => integer().nullable()(); RealColumn get targetScoreSnapshot => real().nullable()(); + IntColumn get targetScoreTimeMsSnapshot => integer().nullable()(); IntColumn get actualTimeMs => integer().nullable()(); IntColumn get actualReps => integer().nullable()(); RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); TextColumn get scoreLabelSnapshot => text().nullable()(); TextColumn get scoreUnitSnapshot => text().nullable()(); DateTimeColumn get startedAt => dateTime().nullable()(); @@ -351,12 +411,28 @@ class WorkoutHistorySetResults extends SyncableTable { 'target_time_seconds_snapshot > 0)', 'CHECK (target_reps_snapshot IS NULL OR target_reps_snapshot > 0)', 'CHECK (target_score_snapshot IS NULL OR target_score_snapshot >= 0)', + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot > 0)', 'CHECK (actual_time_ms IS NULL OR actual_time_ms >= 0)', 'CHECK (actual_reps IS NULL OR actual_reps >= 0)', 'CHECK (actual_score IS NULL OR actual_score >= 0)', + 'CHECK (actual_score_time_ms IS NULL OR actual_score_time_ms >= 0)', "CHECK (status IN ('completed', 'skipped'))", 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' - 'AND actual_reps IS NULL AND actual_score IS NULL))', + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + "CHECK (score_input_mode_snapshot IN ('manual', 'stopwatch'))", + 'CHECK (target_score_snapshot IS NULL OR ' + "(score_enabled_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + "(score_enabled_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (target_score_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot IS NULL)', + 'CHECK (actual_score IS NULL OR ' + "score_input_mode_snapshot = 'manual')", + 'CHECK (actual_score_time_ms IS NULL OR ' + "score_input_mode_snapshot = 'stopwatch')", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', 'CHECK (actual_score IS NULL OR (score_label_snapshot IS NOT NULL ' 'AND length(trim(score_label_snapshot)) > 0 ' 'AND score_unit_snapshot IS NOT NULL ' diff --git a/test/application/use_cases_test.dart b/test/application/use_cases_test.dart index fee0301..186a46f 100644 --- a/test/application/use_cases_test.dart +++ b/test/application/use_cases_test.dart @@ -326,6 +326,124 @@ void main() { ]); }, ); + + test( + 'score stopwatch start stop resume accumulates elapsed duration', + () async { + final clock = _FakeClock(DateTime.utc(2026, 7, 17, 12)); + final session = _sessionWithSnapshot( + currentProgramIndex: 0, + currentExerciseIndex: 0, + currentSetIndex: 0, + ); + final repository = _FakeActiveSessionRepository()..session = session; + final useCase = _activeUseCase(repository, clock); + + await useCase.startScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + clock.value = clock.value.add(const Duration(seconds: 5)); + final stopped = await useCase.stopScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + clock.value = clock.value.add(const Duration(seconds: 10)); + await useCase.resumeScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + clock.value = clock.value.add(const Duration(seconds: 3)); + final stoppedAgain = await useCase.stopScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + + expect(stopped.accumulatedMs, 5000); + expect(stoppedAgain.accumulatedMs, 8000); + }, + ); + + test('score stopwatch state survives use case reconstruction', () async { + final clock = _FakeClock(DateTime.utc(2026, 7, 17, 12)); + final session = _sessionWithSnapshot( + currentProgramIndex: 0, + currentExerciseIndex: 0, + currentSetIndex: 0, + ); + final repository = _FakeActiveSessionRepository()..session = session; + + await _activeUseCase(repository, clock).startScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + clock.value = clock.value.add(const Duration(seconds: 4)); + + final reconstructed = _activeUseCase(repository, clock); + final stopped = await reconstructed.stopScoreStopwatch( + sessionId: session.metadata.id, + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + ); + + expect(stopped.accumulatedMs, 4000); + }); + + test('score result enforces manual xor stopwatch values', () { + expect( + () => ActiveSetResult( + metadata: _metadata('result-1'), + activeWorkoutSessionId: 'session-1', + programSnapshotId: 'program-1', + exerciseSnapshotId: 'exercise-1', + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + actualScore: 12, + actualScoreTimeMs: 12000, + ), + throwsA(isA()), + ); + expect( + () => ActiveSetResult( + metadata: _metadata('result-2'), + activeWorkoutSessionId: 'session-1', + programSnapshotId: 'program-1', + exerciseSnapshotId: 'exercise-1', + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + actualScore: 12, + scoreInputModeSnapshot: ScoreInputMode.stopwatch, + ), + throwsA(isA()), + ); + expect( + () => ActiveSetResult( + metadata: _metadata('result-3'), + activeWorkoutSessionId: 'session-1', + programSnapshotId: 'program-1', + exerciseSnapshotId: 'exercise-1', + programIndex: 0, + exerciseIndex: 0, + setIndex: 0, + actualScoreTimeMs: 12000, + scoreInputModeSnapshot: ScoreInputMode.manual, + ), + throwsA(isA()), + ); + }); } EntityMetadata _metadata(String id) { @@ -414,6 +532,7 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { ActiveWorkoutSession? session; final results = []; final restStates = {}; + final scoreStopwatchStates = {}; @override Future findById(String id) async { @@ -426,6 +545,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future findRestStateById(String id) async => restStates[id]; + @override + Future findScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return scoreStopwatchStates.values + .where( + (state) => + state.activeWorkoutSessionId == sessionId && + state.programIndex == programIndex && + state.exerciseIndex == exerciseIndex && + state.setIndex == setIndex && + state.metadata.deletedAt == null, + ) + .firstOrNull; + } + @override Future> listRestStates(String sessionId) async { return restStates.values @@ -433,6 +571,19 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .toList(); } + @override + Future> listScoreStopwatchStates( + String sessionId, + ) async { + return scoreStopwatchStates.values + .where( + (state) => + state.activeWorkoutSessionId == sessionId && + state.metadata.deletedAt == null, + ) + .toList(); + } + @override Future> listSetResults(String sessionId) async { return results @@ -450,6 +601,31 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { restStates[restState.metadata.id] = restState; } + @override + Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async { + scoreStopwatchStates[state.metadata.id] = state; + } + + @override + Future deleteScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required DateTime deletedAt, + }) async { + final state = await findScoreStopwatchState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state == null) { + return; + } + scoreStopwatchStates.remove(state.metadata.id); + } + @override Future saveSetResult(ActiveSetResult result) async { results.removeWhere( diff --git a/test/presentation/history_screen_test.dart b/test/presentation/history_screen_test.dart index 394b599..3e6fe73 100644 --- a/test/presentation/history_screen_test.dart +++ b/test/presentation/history_screen_test.dart @@ -287,11 +287,26 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future findRestStateById(String id) async => null; + @override + Future findScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async => null; + @override Future> listRestStates(String sessionId) async { return const []; } + @override + Future> listScoreStopwatchStates( + String sessionId, + ) async { + return const []; + } + @override Future> listSetResults(String sessionId) async { return const []; @@ -303,6 +318,18 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future saveRestState(ActiveRestState restState) async {} + @override + Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async {} + + @override + Future deleteScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required DateTime deletedAt, + }) async {} + @override Future saveSetResult(ActiveSetResult result) async {} } diff --git a/test/presentation/workout_execution_screen_test.dart b/test/presentation/workout_execution_screen_test.dart index 83e3910..7cf8944 100644 --- a/test/presentation/workout_execution_screen_test.dart +++ b/test/presentation/workout_execution_screen_test.dart @@ -545,6 +545,7 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { ActiveWorkoutSession? session; final results = []; final restStates = []; + final scoreStopwatchStates = []; @override Future findById(String id) async { @@ -564,6 +565,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + for (final state in scoreStopwatchStates) { + if (state.activeWorkoutSessionId == sessionId && + state.programIndex == programIndex && + state.exerciseIndex == exerciseIndex && + state.setIndex == setIndex && + state.metadata.deletedAt == null) { + return state; + } + } + return null; + } + @override Future> listRestStates(String sessionId) async { return restStates @@ -571,6 +591,15 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .toList(); } + @override + Future> listScoreStopwatchStates( + String sessionId, + ) async { + return scoreStopwatchStates + .where((state) => state.activeWorkoutSessionId == sessionId) + .toList(); + } + @override Future> listSetResults(String sessionId) async { return results; @@ -593,6 +622,27 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { } } + @override + Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async { + final index = scoreStopwatchStates.indexWhere( + (saved) => saved.metadata.id == state.metadata.id, + ); + if (index == -1) { + scoreStopwatchStates.add(state); + } else { + scoreStopwatchStates[index] = state; + } + } + + @override + Future deleteScoreStopwatchState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required DateTime deletedAt, + }) async {} + @override Future saveSetResult(ActiveSetResult result) async { final index = results.indexWhere(