From ebba22db5630f014694fe9cd3e0fcc59abbc3673 Mon Sep 17 00:00:00 2001 From: Blomios Date: Sun, 19 Jul 2026 19:52:43 +0200 Subject: [PATCH] =?UTF-8?q?feat(exercice):=20ex=C3=A9cution=20persistante?= =?UTF-8?q?=20des=20=C3=A9tapes=20et=20=C3=A9diteur=20d'=C3=A9tapes=20(tic?= =?UTF-8?q?kets=20#58,=20#59)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajoute la persistance de l'exécution par étapes avec résultats par passage (ports, use cases, entités, modèle Drift avec migration) et l'éditeur d'exercice avec séquence d'étapes sur exercise_library_screen.dart. Développés dans le même worktree partagé par DevBackend et DevFrontend ; commit combiné plutôt que séparé car les fakes de repository de test corrigés (nouvelles interfaces #58) touchent plusieurs écrans sans lien avec l'éditeur lui-même (historique, accueil, exécution, séance-modèle). Corrige au passage un ListTile sans ancêtre Material dans le nouvel éditeur d'étapes (Material(type: MaterialType.transparency)). flutter pub get OK, build_runner OK, analyze propre (mêmes infos préexistantes), 93/93 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 --- lib/application/ports.dart | 17 + lib/application/use_cases.dart | 751 ++ lib/domain/entities.dart | 316 + lib/infrastructure/local/app_database.dart | 30 +- lib/infrastructure/local/app_database.g.dart | 8648 +++++++++++++++++ .../local/drift_repositories.dart | 418 + lib/infrastructure/local/tables.dart | 170 + lib/presentation/exercise_library_screen.dart | 556 +- test/application/use_cases_test.dart | 62 + .../exercise_library_screen_test.dart | 222 + test/presentation/history_screen_test.dart | 33 + test/presentation/home_screen_test.dart | 35 + .../workout_execution_screen_test.dart | 80 + .../workout_template_screen_test.dart | 35 + 14 files changed, 11371 insertions(+), 2 deletions(-) diff --git a/lib/application/ports.dart b/lib/application/ports.dart index dd9be66..dd798b6 100644 --- a/lib/application/ports.dart +++ b/lib/application/ports.dart @@ -81,6 +81,10 @@ abstract interface class ActiveSessionRepository { Future saveSetResult(ActiveSetResult result); Future saveRestState(ActiveRestState restState); Future saveScoreStopwatchState(ActiveScoreStopwatchState state); + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ); + Future saveExerciseStepResult(ActiveExerciseStepResult result); Future deleteScoreStopwatchState({ required String sessionId, required int programIndex, @@ -95,7 +99,19 @@ abstract interface class ActiveSessionRepository { required int exerciseIndex, required int setIndex, }); + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }); Future> listSetResults(String sessionId); + Future> listExerciseStepProgressStates( + String sessionId, + ); + Future> listExerciseStepResults( + String sessionId, + ); Future> listRestStates(String sessionId); Future> listScoreStopwatchStates( String sessionId, @@ -107,6 +123,7 @@ abstract interface class WorkoutHistoryRepository { Future> listActive(); Future save(WorkoutHistory history); Future saveSetResult(WorkoutHistorySetResult result); + Future saveStepResult(WorkoutHistoryStepResult result); Future delete(String id, DateTime deletedAt); } diff --git a/lib/application/use_cases.dart b/lib/application/use_cases.dart index f612def..756fbab 100644 --- a/lib/application/use_cases.dart +++ b/lib/application/use_cases.dart @@ -68,6 +68,7 @@ final class ExerciseUseCases { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); await repository.save(exercise); return exercise; @@ -962,6 +963,23 @@ final class ActiveWorkoutSessionUseCases { ); await sessionRepository.saveScoreStopwatchState(stopped); } + final runningStepTimers = + (await sessionRepository.listExerciseStepProgressStates(sessionId)) + .where( + (state) => + state.status == + ActiveExerciseStepProgressStatus.runningTimer, + ); + for (final state in runningStepTimers) { + final pausedStep = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.pausedTimer, + accumulatedMs: state.elapsedMillisecondsAt(now), + startedAt: null, + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(pausedStep); + } final paused = session.pause(now); await sessionRepository.save(paused); return paused; @@ -1441,6 +1459,555 @@ final class ActiveWorkoutSessionUseCases { } } +final class ActiveExerciseStepProgressView { + const ActiveExerciseStepProgressView({ + required this.state, + required this.steps, + required this.expectedPassages, + required this.results, + }); + + final ActiveExerciseStepProgressState state; + final List steps; + final int expectedPassages; + final List results; + + ExerciseStep? get currentStep => + state.status == ActiveExerciseStepProgressStatus.sequenceComplete + ? null + : steps[state.currentStepIndex]; +} + +final class ActiveExerciseStepUseCases { + const ActiveExerciseStepUseCases({ + required this.sessionRepository, + required this.clock, + required this.ids, + required this.originDeviceId, + }); + + final ActiveSessionRepository sessionRepository; + final Clock clock; + final IdGenerator ids; + final String originDeviceId; + + Future startOrResumeProgress({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final existing = await sessionRepository.findExerciseStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final state = existing ?? + _initialStepProgressState( + sessionId: sessionId, + context: context, + now: now, + ); + if (existing == null) { + await sessionRepository.saveExerciseStepProgressState(state); + } + final advanced = await _autoAdvanceElapsedTimers(context, state, now); + return ActiveExerciseStepProgressView( + state: advanced, + steps: context.steps, + expectedPassages: context.expectedPassages, + results: await _stepResultsForPosition(context), + ); + } + + Future readProgress({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) => startOrResumeProgress( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + + Future startTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final view = await startOrResumeProgress( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final step = view.currentStep; + if (step == null || step.type != ExerciseStepType.time) { + throw const DomainException('Current exercise step is not timed.'); + } + if (view.state.status == ActiveExerciseStepProgressStatus.runningTimer) { + return view.state; + } + final now = clock.now(); + final running = view.state.copyWith( + metadata: view.state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.runningTimer, + startedAt: now, + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(running); + return running; + } + + Future pauseTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state.status != ActiveExerciseStepProgressStatus.runningTimer) { + throw const DomainException('Exercise step timer is not running.'); + } + final now = clock.now(); + final paused = state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.pausedTimer, + startedAt: null, + accumulatedMs: state.elapsedMillisecondsAt(now), + lastTransitionAt: now, + ); + await sessionRepository.saveExerciseStepProgressState(paused); + return paused; + } + + Future resumeTimer({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) { + return startTimer( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + } + + int elapsedMilliseconds(ActiveExerciseStepProgressState state) { + return state.elapsedMillisecondsAt(clock.now()); + } + + int remainingMilliseconds({ + required ActiveExerciseStepProgressState state, + required ExerciseStep step, + }) { + final targetMs = step.defaultTargetValue * 1000; + final remaining = targetMs - elapsedMilliseconds(state); + return remaining < 0 ? 0 : remaining; + } + + Future completeCurrentStep({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + int? actualReps, + double? actualScore, + int? actualScoreTimeMs, + String? note, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final state = await _autoAdvanceElapsedTimers( + context, + await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ), + now, + ); + final step = _currentStep(context, state); + if (state.status == ActiveExerciseStepProgressStatus.sequenceComplete) { + throw const DomainException('Exercise step sequence is complete.'); + } + final completed = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.completed, + now: now, + actualTimeMs: step.type == ExerciseStepType.time + ? state.elapsedMillisecondsAt(now) + : null, + actualReps: step.type == ExerciseStepType.reps + ? actualReps ?? step.defaultTargetValue + : null, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + ); + await sessionRepository.saveExerciseStepResult(completed); + await sessionRepository.saveExerciseStepProgressState( + _advanceState(context, state, now), + ); + return completed; + } + + Future skipCurrentStep({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final step = _currentStep(context, state); + final skipped = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + await sessionRepository.saveExerciseStepResult(skipped); + await sessionRepository.saveExerciseStepProgressState( + _advanceState(context, state, now), + ); + return skipped; + } + + Future> skipCurrentPassage({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + var state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final skipped = []; + final passage = state.currentPassageIndex; + while (state.status != ActiveExerciseStepProgressStatus.sequenceComplete && + state.currentPassageIndex == passage) { + final step = _currentStep(context, state); + final result = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + skipped.add(result); + await sessionRepository.saveExerciseStepResult(result); + state = _advanceState(context, state, now); + } + await sessionRepository.saveExerciseStepProgressState(state); + return skipped; + } + + Future> skipSequence({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final context = await _stepContext( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + var state = await _requiredStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + final now = clock.now(); + final skipped = []; + while (state.status != ActiveExerciseStepProgressStatus.sequenceComplete) { + final step = _currentStep(context, state); + final result = _stepResult( + context: context, + state: state, + step: step, + status: SetResultStatus.skipped, + now: now, + ); + skipped.add(result); + await sessionRepository.saveExerciseStepResult(result); + state = _advanceState(context, state, now); + } + await sessionRepository.saveExerciseStepProgressState(state); + return skipped; + } + + Future _requiredStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final state = await sessionRepository.findExerciseStepProgressState( + sessionId: sessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + ); + if (state == null) { + throw const DomainException('Exercise step progress state not found.'); + } + return state; + } + + Future<_StepSequenceContext> _stepContext({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final session = await sessionRepository.findById(sessionId); + if (session == null) { + throw const DomainException('Active workout session not found.'); + } + final snapshot = _findExerciseSnapshot( + resolvedTemplateSnapshotJson: session.resolvedTemplateSnapshotJson, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + ); + if (snapshot == null || snapshot.steps.isEmpty) { + throw const DomainException('Exercise step sequence not found.'); + } + return _StepSequenceContext( + sessionId: sessionId, + programSnapshotId: snapshot.programSnapshotId, + exerciseSnapshotId: snapshot.exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + steps: snapshot.steps, + expectedPassages: snapshot.repsEnabled + ? (snapshot.targetReps ?? 1).clamp(1, 1 << 31) + : 1, + ); + } + + ActiveExerciseStepProgressState _initialStepProgressState({ + required String sessionId, + required _StepSequenceContext context, + required DateTime now, + }) { + final firstStep = context.steps.first; + return ActiveExerciseStepProgressState( + metadata: _newMetadata(ids, originDeviceId, now), + activeWorkoutSessionId: sessionId, + programIndex: context.programIndex, + exerciseIndex: context.exerciseIndex, + setIndex: context.setIndex, + currentPassageIndex: 0, + currentStepIndex: 0, + currentStepSnapshotId: firstStep.id, + status: firstStep.type == ExerciseStepType.time + ? ActiveExerciseStepProgressStatus.stoppedTimer + : ActiveExerciseStepProgressStatus.waitingManual, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + + Future _autoAdvanceElapsedTimers( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + DateTime now, + ) async { + var current = state; + while (current.status == ActiveExerciseStepProgressStatus.runningTimer) { + final step = _currentStep(context, current); + if (step.type != ExerciseStepType.time) { + break; + } + final targetMs = step.defaultTargetValue * 1000; + final elapsed = current.elapsedMillisecondsAt(now); + if (elapsed < targetMs) { + break; + } + final result = _stepResult( + context: context, + state: current, + step: step, + status: SetResultStatus.completed, + now: now, + actualTimeMs: targetMs, + ); + await sessionRepository.saveExerciseStepResult(result); + final overflowMs = elapsed - targetMs; + current = _advanceState( + context, + current, + now, + runningTimerOverflowMs: overflowMs, + ); + await sessionRepository.saveExerciseStepProgressState(current); + } + return current; + } + + ActiveExerciseStepProgressState _advanceState( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + DateTime now, { + int runningTimerOverflowMs = 0, + }) { + var nextPassage = state.currentPassageIndex; + var nextStep = state.currentStepIndex + 1; + if (nextStep >= context.steps.length) { + nextStep = 0; + nextPassage++; + } + if (nextPassage >= context.expectedPassages) { + return state.copyWith( + metadata: state.metadata.touch(now), + status: ActiveExerciseStepProgressStatus.sequenceComplete, + startedAt: null, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + final step = context.steps[nextStep]; + final status = step.type == ExerciseStepType.time + ? runningTimerOverflowMs > 0 + ? ActiveExerciseStepProgressStatus.runningTimer + : ActiveExerciseStepProgressStatus.stoppedTimer + : ActiveExerciseStepProgressStatus.waitingManual; + return state.copyWith( + metadata: state.metadata.touch(now), + currentPassageIndex: nextPassage, + currentStepIndex: nextStep, + currentStepSnapshotId: step.id, + status: status, + startedAt: status == ActiveExerciseStepProgressStatus.runningTimer + ? now.subtract(Duration(milliseconds: runningTimerOverflowMs)) + : null, + accumulatedMs: 0, + lastTransitionAt: now, + ); + } + + ExerciseStep _currentStep( + _StepSequenceContext context, + ActiveExerciseStepProgressState state, + ) { + if (state.status == ActiveExerciseStepProgressStatus.sequenceComplete) { + throw const DomainException('Exercise step sequence is complete.'); + } + return context.steps[state.currentStepIndex]; + } + + Future> _stepResultsForPosition( + _StepSequenceContext context, + ) async { + return (await sessionRepository.listExerciseStepResults(context.sessionId)) + .where( + (result) => + result.programIndex == context.programIndex && + result.exerciseIndex == context.exerciseIndex && + result.setIndex == context.setIndex, + ) + .toList(); + } + + ActiveExerciseStepResult _stepResult({ + required _StepSequenceContext context, + required ActiveExerciseStepProgressState state, + required ExerciseStep step, + required SetResultStatus status, + required DateTime now, + int? actualTimeMs, + int? actualReps, + double? actualScore, + int? actualScoreTimeMs, + String? note, + }) { + return ActiveExerciseStepResult( + metadata: _newMetadata(ids, originDeviceId, now), + activeWorkoutSessionId: context.sessionId, + programSnapshotId: context.programSnapshotId, + exerciseSnapshotId: context.exerciseSnapshotId, + programIndex: context.programIndex, + exerciseIndex: context.exerciseIndex, + setIndex: context.setIndex, + passageIndex: state.currentPassageIndex, + stepIndex: state.currentStepIndex, + stepSnapshotId: step.id, + stepNameSnapshot: step.name, + stepTypeSnapshot: step.type, + targetValueSnapshot: step.defaultTargetValue, + hasScoreSnapshot: step.hasScore, + scoreInputModeSnapshot: step.hasScore ? step.scoreInputMode : null, + scoreLabelSnapshot: step.scoreLabel, + scoreUnitSnapshot: step.scoreUnit, + targetScoreSnapshot: step.defaultTargetScore, + targetScoreTimeMsSnapshot: step.defaultTargetScoreTimeMs, + status: status, + startedAt: state.startedAt, + completedAt: status == SetResultStatus.completed ? now : null, + actualTimeMs: status == SetResultStatus.completed ? actualTimeMs : null, + actualReps: status == SetResultStatus.completed ? actualReps : null, + actualScore: status == SetResultStatus.completed ? actualScore : null, + actualScoreTimeMs: status == SetResultStatus.completed + ? actualScoreTimeMs + : null, + note: note, + ); + } +} + final class CloseWorkoutSessionUseCase { const CloseWorkoutSessionUseCase({ required this.sessionRepository, @@ -1467,6 +2034,9 @@ final class CloseWorkoutSessionUseCase { } final now = clock.now(); final results = await sessionRepository.listSetResults(sessionId); + final stepResults = await sessionRepository.listExerciseStepResults( + sessionId, + ); final historyId = ids.newId(); final historyResults = _historyResultsFromActiveResults( historyId: historyId, @@ -1476,6 +2046,13 @@ final class CloseWorkoutSessionUseCase { ids: ids, originDeviceId: originDeviceId, ); + final historyStepResults = _historyStepResultsFromActiveResults( + historyId: historyId, + results: stepResults, + now: now, + ids: ids, + originDeviceId: originDeviceId, + ); final history = WorkoutHistory( metadata: EntityMetadata( id: historyId, @@ -1512,8 +2089,38 @@ final class CloseWorkoutSessionUseCase { }, ) .toList(), + 'stepResults': stepResults + .map( + (result) => { + 'programSnapshotId': result.programSnapshotId, + 'exerciseSnapshotId': result.exerciseSnapshotId, + 'programIndex': result.programIndex, + 'exerciseIndex': result.exerciseIndex, + 'setIndex': result.setIndex, + 'passageIndex': result.passageIndex, + 'stepIndex': result.stepIndex, + 'stepSnapshotId': result.stepSnapshotId, + 'stepNameSnapshot': result.stepNameSnapshot, + 'stepTypeSnapshot': result.stepTypeSnapshot.name, + 'targetValueSnapshot': result.targetValueSnapshot, + 'hasScoreSnapshot': result.hasScoreSnapshot, + 'scoreInputModeSnapshot': result.scoreInputModeSnapshot?.name, + 'scoreLabelSnapshot': result.scoreLabelSnapshot, + 'scoreUnitSnapshot': result.scoreUnitSnapshot, + 'targetScoreSnapshot': result.targetScoreSnapshot, + 'targetScoreTimeMsSnapshot': result.targetScoreTimeMsSnapshot, + 'status': result.status.name, + 'actualTimeMs': result.actualTimeMs, + 'actualReps': result.actualReps, + 'actualScore': result.actualScore, + 'actualScoreTimeMs': result.actualScoreTimeMs, + 'note': result.note, + }, + ) + .toList(), }), results: historyResults, + stepResults: historyStepResults, ); await historyRepository.save(history); return history; @@ -1867,6 +2474,53 @@ _SetPositionSnapshot? _findSetSnapshot({ return null; } +_ResolvedExerciseSnapshot? _findExerciseSnapshot({ + required String resolvedTemplateSnapshotJson, + required int programIndex, + required int exerciseIndex, +}) { + final decoded = + jsonDecode(resolvedTemplateSnapshotJson) as Map; + final programs = (decoded['programs'] as List? ?? const []); + if (programIndex < 0 || programIndex >= programs.length) { + return null; + } + final program = programs[programIndex] as Map; + final programSnapshotId = program['id'] as String? ?? 'program-$programIndex'; + final programName = program['programNameSnapshot'] as String? ?? ''; + final programSnapshotJson = program['programSnapshotJson'] as String?; + if (programSnapshotJson == null) { + return null; + } + final programSnapshot = + jsonDecode(programSnapshotJson) as Map; + final exercises = (programSnapshot['exercises'] as List? ?? const []); + if (exerciseIndex < 0 || exerciseIndex >= exercises.length) { + return null; + } + final exercise = exercises[exerciseIndex] as Map; + final id = exercise['id'] as String? ?? 'exercise-$exerciseIndex'; + return _ResolvedExerciseSnapshot( + programSnapshotId: programSnapshotId, + exerciseSnapshotId: id, + programNameSnapshot: programName, + exerciseNameSnapshot: exercise['exerciseNameSnapshot'] as String? ?? id, + timeEnabled: exercise['timeEnabled'] == true, + repsEnabled: exercise['repsEnabled'] == true, + scoreEnabled: exercise['scoreEnabled'] == true, + 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?, + steps: _exerciseStepsFromSnapshot(exercise['exerciseStepsSnapshot']), + ); +} + List<_SetPositionSnapshot> _listSetSnapshots( String resolvedTemplateSnapshotJson, ) { @@ -1938,6 +2592,28 @@ final class _SetPositionSnapshot { final ScoreInputMode scoreInputModeSnapshot; } +final class _StepSequenceContext { + const _StepSequenceContext({ + required this.sessionId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.steps, + required this.expectedPassages, + }); + + final String sessionId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final List steps; + final int expectedPassages; +} + List _historyResultsFromActiveResults({ required String historyId, required List results, @@ -2010,6 +2686,8 @@ Map _exerciseSnapshotsById( continue; } snapshots[id] = _ResolvedExerciseSnapshot( + programSnapshotId: program['id'] as String? ?? id, + exerciseSnapshotId: id, programNameSnapshot: programName, exerciseNameSnapshot: exercise['exerciseNameSnapshot'] as String? ?? id, timeEnabled: exercise['timeEnabled'] == true, @@ -2024,6 +2702,7 @@ Map _exerciseSnapshotsById( ), scoreLabelSnapshot: exercise['scoreLabelSnapshot'] as String?, scoreUnitSnapshot: exercise['scoreUnitSnapshot'] as String?, + steps: _exerciseStepsFromSnapshot(exercise['exerciseStepsSnapshot']), ); } } @@ -2032,6 +2711,8 @@ Map _exerciseSnapshotsById( final class _ResolvedExerciseSnapshot { const _ResolvedExerciseSnapshot({ + required this.programSnapshotId, + required this.exerciseSnapshotId, required this.programNameSnapshot, required this.exerciseNameSnapshot, required this.timeEnabled, @@ -2044,8 +2725,11 @@ final class _ResolvedExerciseSnapshot { required this.scoreInputModeSnapshot, this.scoreLabelSnapshot, this.scoreUnitSnapshot, + this.steps = const [], }); + final String programSnapshotId; + final String exerciseSnapshotId; final String programNameSnapshot; final String exerciseNameSnapshot; final bool timeEnabled; @@ -2058,6 +2742,73 @@ final class _ResolvedExerciseSnapshot { final ScoreInputMode scoreInputModeSnapshot; final String? scoreLabelSnapshot; final String? scoreUnitSnapshot; + final List steps; +} + +List _exerciseStepsFromSnapshot(Object? value) { + if (value is! List) { + return const []; + } + return value.map((item) { + final json = Map.from(item as Map); + return ExerciseStep( + id: json['id'] as String, + position: json['position'] as int, + name: json['name'] as String, + type: switch (json['type']) { + 'time' => ExerciseStepType.time, + 'reps' => ExerciseStepType.reps, + _ => throw const DomainException('Unknown exercise step type.'), + }, + defaultTargetValue: json['defaultTargetValue'] as int, + hasScore: json['hasScore'] == true, + scoreInputMode: _scoreInputModeFromSnapshot(json['scoreInputMode']), + scoreLabel: json['scoreLabel'] as String?, + scoreUnit: json['scoreUnit'] as String?, + defaultTargetScore: (json['defaultTargetScore'] as num?)?.toDouble(), + defaultTargetScoreTimeMs: json['defaultTargetScoreTimeMs'] as int?, + ); + }).toList(growable: false); +} + +List _historyStepResultsFromActiveResults({ + required String historyId, + required List results, + required DateTime now, + required IdGenerator ids, + required String originDeviceId, +}) { + return results.map((result) { + return WorkoutHistoryStepResult( + metadata: _newMetadata(ids, originDeviceId, now), + workoutHistoryId: historyId, + programSnapshotId: result.programSnapshotId, + exerciseSnapshotId: result.exerciseSnapshotId, + programIndex: result.programIndex, + exerciseIndex: result.exerciseIndex, + setIndex: result.setIndex, + passageIndex: result.passageIndex, + stepIndex: result.stepIndex, + stepSnapshotId: result.stepSnapshotId, + stepNameSnapshot: result.stepNameSnapshot, + stepTypeSnapshot: result.stepTypeSnapshot, + targetValueSnapshot: result.targetValueSnapshot, + hasScoreSnapshot: result.hasScoreSnapshot, + scoreInputModeSnapshot: result.scoreInputModeSnapshot, + scoreLabelSnapshot: result.scoreLabelSnapshot, + scoreUnitSnapshot: result.scoreUnitSnapshot, + targetScoreSnapshot: result.targetScoreSnapshot, + targetScoreTimeMsSnapshot: result.targetScoreTimeMsSnapshot, + status: result.status, + startedAt: result.startedAt, + completedAt: result.completedAt, + actualTimeMs: result.actualTimeMs, + actualReps: result.actualReps, + actualScore: result.actualScore, + actualScoreTimeMs: result.actualScoreTimeMs, + note: result.note, + ); + }).toList(); } EntityMetadata _newMetadata( diff --git a/lib/domain/entities.dart b/lib/domain/entities.dart index a8e8501..b60b8a4 100644 --- a/lib/domain/entities.dart +++ b/lib/domain/entities.dart @@ -16,6 +16,15 @@ enum SetResultStatus { completed, skipped } enum ActiveScoreStopwatchStatus { running, stopped } +enum ActiveExerciseStepProgressStatus { + notStarted, + waitingManual, + runningTimer, + pausedTimer, + stoppedTimer, + sequenceComplete, +} + final class DomainException implements Exception { const DomainException(this.message); @@ -916,6 +925,166 @@ final class ActiveRestState { } } +final class ActiveExerciseStepProgressState { + ActiveExerciseStepProgressState({ + required this.metadata, + required this.activeWorkoutSessionId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.currentPassageIndex, + required this.currentStepIndex, + required this.currentStepSnapshotId, + required this.status, + this.startedAt, + required this.accumulatedMs, + required this.lastTransitionAt, + }) { + _requireNonNegative(programIndex, 'Program index'); + _requireNonNegative(exerciseIndex, 'Exercise index'); + _requireNonNegative(setIndex, 'Set index'); + _requireNonNegative(currentPassageIndex, 'Current passage index'); + _requireNonNegative(currentStepIndex, 'Current step index'); + _nonBlank(currentStepSnapshotId, 'Current step snapshot id'); + _requireNonNegative(accumulatedMs, 'Accumulated milliseconds'); + if (status == ActiveExerciseStepProgressStatus.runningTimer && + startedAt == null) { + throw const DomainException( + 'Running exercise step timer requires a start timestamp.', + ); + } + } + + final EntityMetadata metadata; + final String activeWorkoutSessionId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int currentPassageIndex; + final int currentStepIndex; + final String currentStepSnapshotId; + final ActiveExerciseStepProgressStatus status; + final DateTime? startedAt; + final int accumulatedMs; + final DateTime lastTransitionAt; + + int elapsedMillisecondsAt(DateTime now) { + if (status != ActiveExerciseStepProgressStatus.runningTimer || + startedAt == null) { + return accumulatedMs; + } + return accumulatedMs + now.difference(startedAt!).inMilliseconds; + } + + ActiveExerciseStepProgressState copyWith({ + EntityMetadata? metadata, + int? currentPassageIndex, + int? currentStepIndex, + String? currentStepSnapshotId, + ActiveExerciseStepProgressStatus? status, + Object? startedAt = _unchanged, + int? accumulatedMs, + DateTime? lastTransitionAt, + }) { + return ActiveExerciseStepProgressState( + metadata: metadata ?? this.metadata, + activeWorkoutSessionId: activeWorkoutSessionId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: + currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt == _unchanged ? this.startedAt : startedAt as DateTime?, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + ); + } +} + +final class ActiveExerciseStepResult { + ActiveExerciseStepResult({ + required this.metadata, + required this.activeWorkoutSessionId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }) { + _validateExerciseStepResult( + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + } + + final EntityMetadata metadata; + final String activeWorkoutSessionId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final ExerciseStepType stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final ScoreInputMode? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final SetResultStatus status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; +} + final class WorkoutHistory { const WorkoutHistory({ required this.metadata, @@ -928,6 +1097,7 @@ final class WorkoutHistory { required this.completed, required this.historySnapshotJson, this.results = const [], + this.stepResults = const [], }); final EntityMetadata metadata; @@ -940,6 +1110,7 @@ final class WorkoutHistory { final bool completed; final String historySnapshotJson; final List results; + final List stepResults; } final class WorkoutHistorySetResult { @@ -1021,6 +1192,87 @@ final class WorkoutHistorySetResult { final SetResultStatus status; } +final class WorkoutHistoryStepResult { + WorkoutHistoryStepResult({ + required this.metadata, + required this.workoutHistoryId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }) { + _validateExerciseStepResult( + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + } + + final EntityMetadata metadata; + final String workoutHistoryId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final ExerciseStepType stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final ScoreInputMode? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final SetResultStatus status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; +} + String _nonBlank(String? value, String label) { final trimmed = value?.trim(); if (trimmed == null || trimmed.isEmpty) { @@ -1222,3 +1474,67 @@ void _requireScoreResultShape({ ); } } + +void _validateExerciseStepResult({ + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required ExerciseStepType stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + required ScoreInputMode? scoreInputModeSnapshot, + required String? scoreLabelSnapshot, + required String? scoreUnitSnapshot, + required double? targetScoreSnapshot, + required int? targetScoreTimeMsSnapshot, + required SetResultStatus status, + required int? actualTimeMs, + required int? actualReps, + required double? actualScore, + required int? actualScoreTimeMs, +}) { + _requireNonNegative(programIndex, 'Program index'); + _requireNonNegative(exerciseIndex, 'Exercise index'); + _requireNonNegative(setIndex, 'Set index'); + _requireNonNegative(passageIndex, 'Passage index'); + _requireNonNegative(stepIndex, 'Step index'); + _requirePositive(targetValueSnapshot, 'Step target value snapshot'); + _requireNullableNonNegative(actualTimeMs, 'Actual time milliseconds'); + _requireNullableNonNegative(actualReps, 'Actual reps'); + _requireNullableNonNegativeDouble(actualScore, 'Actual score'); + _requireNullableNonNegative(actualScoreTimeMs, 'Actual score time ms'); + if (status == SetResultStatus.skipped && + (actualTimeMs != null || + actualReps != null || + actualScore != null || + actualScoreTimeMs != null)) { + throw const DomainException('Skipped step results cannot have values.'); + } + if (actualTimeMs != null && stepTypeSnapshot != ExerciseStepType.time) { + throw const DomainException('Actual time requires a time step.'); + } + if (actualReps != null && stepTypeSnapshot != ExerciseStepType.reps) { + throw const DomainException('Actual reps requires a reps step.'); + } + final mode = scoreInputModeSnapshot ?? ScoreInputMode.manual; + _requireScoreTargetShape( + scoreEnabled: hasScoreSnapshot, + scoreInputMode: mode, + targetScore: targetScoreSnapshot, + targetScoreTimeMs: targetScoreTimeMsSnapshot, + ); + _requireScoreResultShape( + scoreInputMode: mode, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + ); + if (!hasScoreSnapshot && (actualScore != null || actualScoreTimeMs != null)) { + throw const DomainException('Step score result requires active score.'); + } + if (actualScore != null) { + _nonBlank(scoreLabelSnapshot, 'Step score label snapshot'); + _nonBlank(scoreUnitSnapshot, 'Step score unit snapshot'); + } +} diff --git a/lib/infrastructure/local/app_database.dart b/lib/infrastructure/local/app_database.dart index 65328d8..aa60471 100644 --- a/lib/infrastructure/local/app_database.dart +++ b/lib/infrastructure/local/app_database.dart @@ -7,6 +7,8 @@ part 'app_database.g.dart'; @DriftDatabase( tables: [ + ActiveExerciseStepProgressStates, + ActiveExerciseStepResults, ActiveRestStates, ActiveScoreStopwatchStates, ActiveSetResults, @@ -20,6 +22,7 @@ part 'app_database.g.dart'; Programs, WorkoutHistories, WorkoutHistorySetResults, + WorkoutHistoryStepResults, WorkoutTemplateExerciseOverrides, WorkoutTemplatePrograms, WorkoutTemplates, @@ -38,7 +41,7 @@ final class AppDatabase extends _$AppDatabase { } @override - int get schemaVersion => 8; + int get schemaVersion => 9; @override MigrationStrategy get migration { @@ -77,6 +80,9 @@ final class AppDatabase extends _$AppDatabase { if (from < 8) { await _migrateToSchema8(migrator); } + if (from < 9) { + await _migrateToSchema9(migrator); + } await _createIndexes(); }, beforeOpen: (details) async { @@ -133,6 +139,15 @@ final class AppDatabase extends _$AppDatabase { 'CREATE INDEX IF NOT EXISTS idx_active_rest_states_session_id ' 'ON active_rest_states (active_workout_session_id)', ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS ' + 'idx_active_exercise_step_progress_states_session_id ' + 'ON active_exercise_step_progress_states (active_workout_session_id)', + ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS idx_active_exercise_step_results_session_id ' + 'ON active_exercise_step_results (active_workout_session_id)', + ); await customStatement( 'CREATE UNIQUE INDEX IF NOT EXISTS ' 'idx_active_workout_sessions_single_open ' @@ -148,6 +163,10 @@ final class AppDatabase extends _$AppDatabase { 'CREATE INDEX IF NOT EXISTS idx_workout_history_set_results_history_id ' 'ON workout_history_set_results (workout_history_id)', ); + await customStatement( + 'CREATE INDEX IF NOT EXISTS idx_workout_history_step_results_history_id ' + 'ON workout_history_step_results (workout_history_id)', + ); await customStatement( 'CREATE INDEX IF NOT EXISTS idx_change_log_entity ' 'ON change_log (entity_type, entity_id)', @@ -164,6 +183,8 @@ final class AppDatabase extends _$AppDatabase { } const _syncableTableNames = [ + 'active_exercise_step_progress_states', + 'active_exercise_step_results', 'active_rest_states', 'active_score_stopwatch_states', 'active_set_results', @@ -176,6 +197,7 @@ const _syncableTableNames = [ 'programs', 'workout_history', 'workout_history_set_results', + 'workout_history_step_results', 'workout_template_exercise_overrides', 'workout_template_programs', 'workout_templates', @@ -287,4 +309,10 @@ extension on AppDatabase { 'exercise_steps_snapshot_json TEXT', ); } + + Future _migrateToSchema9(Migrator migrator) async { + await migrator.createTable(activeExerciseStepProgressStates); + await migrator.createTable(activeExerciseStepResults); + await migrator.createTable(workoutHistoryStepResults); + } } diff --git a/lib/infrastructure/local/app_database.g.dart b/lib/infrastructure/local/app_database.g.dart index 5bf1c04..cae6f0d 100644 --- a/lib/infrastructure/local/app_database.g.dart +++ b/lib/infrastructure/local/app_database.g.dart @@ -2110,6 +2110,3441 @@ class ActiveWorkoutSessionsCompanion } } +class $ActiveExerciseStepProgressStatesTable + extends ActiveExerciseStepProgressStates + with + TableInfo< + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState + > { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ActiveExerciseStepProgressStatesTable(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 _currentPassageIndexMeta = + const VerificationMeta('currentPassageIndex'); + @override + late final GeneratedColumn currentPassageIndex = GeneratedColumn( + 'current_passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _currentStepIndexMeta = const VerificationMeta( + 'currentStepIndex', + ); + @override + late final GeneratedColumn currentStepIndex = GeneratedColumn( + 'current_step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _currentStepSnapshotIdMeta = + const VerificationMeta('currentStepSnapshotId'); + @override + late final GeneratedColumn currentStepSnapshotId = + GeneratedColumn( + 'current_step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + 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, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + 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 _lastTransitionAtMeta = const VerificationMeta( + 'lastTransitionAt', + ); + @override + late final GeneratedColumn lastTransitionAt = + GeneratedColumn( + 'last_transition_at', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + currentPassageIndex, + currentStepIndex, + currentStepSnapshotId, + status, + startedAt, + accumulatedMs, + lastTransitionAt, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'active_exercise_step_progress_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('current_passage_index')) { + context.handle( + _currentPassageIndexMeta, + currentPassageIndex.isAcceptableOrUnknown( + data['current_passage_index']!, + _currentPassageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentPassageIndexMeta); + } + if (data.containsKey('current_step_index')) { + context.handle( + _currentStepIndexMeta, + currentStepIndex.isAcceptableOrUnknown( + data['current_step_index']!, + _currentStepIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentStepIndexMeta); + } + if (data.containsKey('current_step_snapshot_id')) { + context.handle( + _currentStepSnapshotIdMeta, + currentStepSnapshotId.isAcceptableOrUnknown( + data['current_step_snapshot_id']!, + _currentStepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_currentStepSnapshotIdMeta); + } + 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), + ); + } + if (data.containsKey('accumulated_ms')) { + context.handle( + _accumulatedMsMeta, + accumulatedMs.isAcceptableOrUnknown( + data['accumulated_ms']!, + _accumulatedMsMeta, + ), + ); + } else if (isInserting) { + context.missing(_accumulatedMsMeta); + } + if (data.containsKey('last_transition_at')) { + context.handle( + _lastTransitionAtMeta, + lastTransitionAt.isAcceptableOrUnknown( + data['last_transition_at']!, + _lastTransitionAtMeta, + ), + ); + } else if (isInserting) { + context.missing(_lastTransitionAtMeta); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ActiveExerciseStepProgressState map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActiveExerciseStepProgressState( + 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'], + )!, + currentPassageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}current_passage_index'], + )!, + currentStepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}current_step_index'], + )!, + currentStepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}current_step_snapshot_id'], + )!, + 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'], + )!, + lastTransitionAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_transition_at'], + )!, + ); + } + + @override + $ActiveExerciseStepProgressStatesTable createAlias(String alias) { + return $ActiveExerciseStepProgressStatesTable(attachedDatabase, alias); + } +} + +class ActiveExerciseStepProgressState 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 int currentPassageIndex; + final int currentStepIndex; + final String currentStepSnapshotId; + final String status; + final DateTime? startedAt; + final int accumulatedMs; + final DateTime lastTransitionAt; + const ActiveExerciseStepProgressState({ + 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.currentPassageIndex, + required this.currentStepIndex, + required this.currentStepSnapshotId, + required this.status, + this.startedAt, + required this.accumulatedMs, + required this.lastTransitionAt, + }); + @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['current_passage_index'] = Variable(currentPassageIndex); + map['current_step_index'] = Variable(currentStepIndex); + map['current_step_snapshot_id'] = Variable(currentStepSnapshotId); + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + map['accumulated_ms'] = Variable(accumulatedMs); + map['last_transition_at'] = Variable(lastTransitionAt); + return map; + } + + ActiveExerciseStepProgressStatesCompanion toCompanion(bool nullToAbsent) { + return ActiveExerciseStepProgressStatesCompanion( + 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), + currentPassageIndex: Value(currentPassageIndex), + currentStepIndex: Value(currentStepIndex), + currentStepSnapshotId: Value(currentStepSnapshotId), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + accumulatedMs: Value(accumulatedMs), + lastTransitionAt: Value(lastTransitionAt), + ); + } + + factory ActiveExerciseStepProgressState.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActiveExerciseStepProgressState( + 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']), + currentPassageIndex: serializer.fromJson( + json['currentPassageIndex'], + ), + currentStepIndex: serializer.fromJson(json['currentStepIndex']), + currentStepSnapshotId: serializer.fromJson( + json['currentStepSnapshotId'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + accumulatedMs: serializer.fromJson(json['accumulatedMs']), + lastTransitionAt: serializer.fromJson(json['lastTransitionAt']), + ); + } + @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), + 'currentPassageIndex': serializer.toJson(currentPassageIndex), + 'currentStepIndex': serializer.toJson(currentStepIndex), + 'currentStepSnapshotId': serializer.toJson(currentStepSnapshotId), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'accumulatedMs': serializer.toJson(accumulatedMs), + 'lastTransitionAt': serializer.toJson(lastTransitionAt), + }; + } + + ActiveExerciseStepProgressState 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, + int? currentPassageIndex, + int? currentStepIndex, + String? currentStepSnapshotId, + String? status, + Value startedAt = const Value.absent(), + int? accumulatedMs, + DateTime? lastTransitionAt, + }) => ActiveExerciseStepProgressState( + 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, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + ); + ActiveExerciseStepProgressState copyWithCompanion( + ActiveExerciseStepProgressStatesCompanion data, + ) { + return ActiveExerciseStepProgressState( + 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, + currentPassageIndex: data.currentPassageIndex.present + ? data.currentPassageIndex.value + : this.currentPassageIndex, + currentStepIndex: data.currentStepIndex.present + ? data.currentStepIndex.value + : this.currentStepIndex, + currentStepSnapshotId: data.currentStepSnapshotId.present + ? data.currentStepSnapshotId.value + : this.currentStepSnapshotId, + 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, + lastTransitionAt: data.lastTransitionAt.present + ? data.lastTransitionAt.value + : this.lastTransitionAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepProgressState(') + ..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('currentPassageIndex: $currentPassageIndex, ') + ..write('currentStepIndex: $currentStepIndex, ') + ..write('currentStepSnapshotId: $currentStepSnapshotId, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('lastTransitionAt: $lastTransitionAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programIndex, + exerciseIndex, + setIndex, + currentPassageIndex, + currentStepIndex, + currentStepSnapshotId, + status, + startedAt, + accumulatedMs, + lastTransitionAt, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActiveExerciseStepProgressState && + 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.currentPassageIndex == this.currentPassageIndex && + other.currentStepIndex == this.currentStepIndex && + other.currentStepSnapshotId == this.currentStepSnapshotId && + other.status == this.status && + other.startedAt == this.startedAt && + other.accumulatedMs == this.accumulatedMs && + other.lastTransitionAt == this.lastTransitionAt); +} + +class ActiveExerciseStepProgressStatesCompanion + 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 currentPassageIndex; + final Value currentStepIndex; + final Value currentStepSnapshotId; + final Value status; + final Value startedAt; + final Value accumulatedMs; + final Value lastTransitionAt; + final Value rowid; + const ActiveExerciseStepProgressStatesCompanion({ + 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.currentPassageIndex = const Value.absent(), + this.currentStepIndex = const Value.absent(), + this.currentStepSnapshotId = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.accumulatedMs = const Value.absent(), + this.lastTransitionAt = const Value.absent(), + this.rowid = const Value.absent(), + }); + ActiveExerciseStepProgressStatesCompanion.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 int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + this.startedAt = const Value.absent(), + required int accumulatedMs, + required DateTime lastTransitionAt, + 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), + currentPassageIndex = Value(currentPassageIndex), + currentStepIndex = Value(currentStepIndex), + currentStepSnapshotId = Value(currentStepSnapshotId), + status = Value(status), + accumulatedMs = Value(accumulatedMs), + lastTransitionAt = Value(lastTransitionAt); + 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? currentPassageIndex, + Expression? currentStepIndex, + Expression? currentStepSnapshotId, + Expression? status, + Expression? startedAt, + Expression? accumulatedMs, + Expression? lastTransitionAt, + 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 (currentPassageIndex != null) + 'current_passage_index': currentPassageIndex, + if (currentStepIndex != null) 'current_step_index': currentStepIndex, + if (currentStepSnapshotId != null) + 'current_step_snapshot_id': currentStepSnapshotId, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (accumulatedMs != null) 'accumulated_ms': accumulatedMs, + if (lastTransitionAt != null) 'last_transition_at': lastTransitionAt, + if (rowid != null) 'rowid': rowid, + }); + } + + ActiveExerciseStepProgressStatesCompanion 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? currentPassageIndex, + Value? currentStepIndex, + Value? currentStepSnapshotId, + Value? status, + Value? startedAt, + Value? accumulatedMs, + Value? lastTransitionAt, + Value? rowid, + }) { + return ActiveExerciseStepProgressStatesCompanion( + 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, + currentPassageIndex: currentPassageIndex ?? this.currentPassageIndex, + currentStepIndex: currentStepIndex ?? this.currentStepIndex, + currentStepSnapshotId: + currentStepSnapshotId ?? this.currentStepSnapshotId, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + accumulatedMs: accumulatedMs ?? this.accumulatedMs, + lastTransitionAt: lastTransitionAt ?? this.lastTransitionAt, + 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 (currentPassageIndex.present) { + map['current_passage_index'] = Variable(currentPassageIndex.value); + } + if (currentStepIndex.present) { + map['current_step_index'] = Variable(currentStepIndex.value); + } + if (currentStepSnapshotId.present) { + map['current_step_snapshot_id'] = Variable( + currentStepSnapshotId.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 (lastTransitionAt.present) { + map['last_transition_at'] = Variable(lastTransitionAt.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepProgressStatesCompanion(') + ..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('currentPassageIndex: $currentPassageIndex, ') + ..write('currentStepIndex: $currentStepIndex, ') + ..write('currentStepSnapshotId: $currentStepSnapshotId, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('accumulatedMs: $accumulatedMs, ') + ..write('lastTransitionAt: $lastTransitionAt, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + +class $ActiveExerciseStepResultsTable extends ActiveExerciseStepResults + with TableInfo<$ActiveExerciseStepResultsTable, ActiveExerciseStepResult> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ActiveExerciseStepResultsTable(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 _programSnapshotIdMeta = const VerificationMeta( + 'programSnapshotId', + ); + @override + late final GeneratedColumn programSnapshotId = + GeneratedColumn( + 'program_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseSnapshotIdMeta = + const VerificationMeta('exerciseSnapshotId'); + @override + late final GeneratedColumn exerciseSnapshotId = + GeneratedColumn( + 'exercise_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + 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 _passageIndexMeta = const VerificationMeta( + 'passageIndex', + ); + @override + late final GeneratedColumn passageIndex = GeneratedColumn( + 'passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepIndexMeta = const VerificationMeta( + 'stepIndex', + ); + @override + late final GeneratedColumn stepIndex = GeneratedColumn( + 'step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepSnapshotIdMeta = const VerificationMeta( + 'stepSnapshotId', + ); + @override + late final GeneratedColumn stepSnapshotId = GeneratedColumn( + 'step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepNameSnapshotMeta = const VerificationMeta( + 'stepNameSnapshot', + ); + @override + late final GeneratedColumn stepNameSnapshot = GeneratedColumn( + 'step_name_snapshot', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepTypeSnapshotMeta = const VerificationMeta( + 'stepTypeSnapshot', + ); + @override + late final GeneratedColumn stepTypeSnapshot = GeneratedColumn( + 'step_type_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _targetValueSnapshotMeta = + const VerificationMeta('targetValueSnapshot'); + @override + late final GeneratedColumn targetValueSnapshot = GeneratedColumn( + 'target_value_snapshot', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _hasScoreSnapshotMeta = const VerificationMeta( + 'hasScoreSnapshot', + ); + @override + late final GeneratedColumn hasScoreSnapshot = GeneratedColumn( + 'has_score_snapshot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("has_score_snapshot" IN (0, 1))', + ), + ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreLabelSnapshotMeta = + const VerificationMeta('scoreLabelSnapshot'); + @override + late final GeneratedColumn scoreLabelSnapshot = + GeneratedColumn( + 'score_label_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreUnitSnapshotMeta = const VerificationMeta( + 'scoreUnitSnapshot', + ); + @override + late final GeneratedColumn scoreUnitSnapshot = + GeneratedColumn( + 'score_unit_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreSnapshotMeta = + const VerificationMeta('targetScoreSnapshot'); + @override + late final GeneratedColumn targetScoreSnapshot = + GeneratedColumn( + 'target_score_snapshot', + aliasedName, + true, + 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 _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, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _completedAtMeta = const VerificationMeta( + 'completedAt', + ); + @override + late final GeneratedColumn completedAt = GeneratedColumn( + 'completed_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualTimeMsMeta = const VerificationMeta( + 'actualTimeMs', + ); + @override + late final GeneratedColumn actualTimeMs = GeneratedColumn( + 'actual_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualRepsMeta = const VerificationMeta( + 'actualReps', + ); + @override + late final GeneratedColumn actualReps = GeneratedColumn( + 'actual_reps', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreMeta = const VerificationMeta( + 'actualScore', + ); + @override + late final GeneratedColumn actualScore = GeneratedColumn( + 'actual_score', + aliasedName, + true, + 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 _noteMeta = const VerificationMeta('note'); + @override + late final GeneratedColumn note = GeneratedColumn( + 'note', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'active_exercise_step_results'; + @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_snapshot_id')) { + context.handle( + _programSnapshotIdMeta, + programSnapshotId.isAcceptableOrUnknown( + data['program_snapshot_id']!, + _programSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_programSnapshotIdMeta); + } + if (data.containsKey('exercise_snapshot_id')) { + context.handle( + _exerciseSnapshotIdMeta, + exerciseSnapshotId.isAcceptableOrUnknown( + data['exercise_snapshot_id']!, + _exerciseSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseSnapshotIdMeta); + } + 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('passage_index')) { + context.handle( + _passageIndexMeta, + passageIndex.isAcceptableOrUnknown( + data['passage_index']!, + _passageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_passageIndexMeta); + } + if (data.containsKey('step_index')) { + context.handle( + _stepIndexMeta, + stepIndex.isAcceptableOrUnknown(data['step_index']!, _stepIndexMeta), + ); + } else if (isInserting) { + context.missing(_stepIndexMeta); + } + if (data.containsKey('step_snapshot_id')) { + context.handle( + _stepSnapshotIdMeta, + stepSnapshotId.isAcceptableOrUnknown( + data['step_snapshot_id']!, + _stepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepSnapshotIdMeta); + } + if (data.containsKey('step_name_snapshot')) { + context.handle( + _stepNameSnapshotMeta, + stepNameSnapshot.isAcceptableOrUnknown( + data['step_name_snapshot']!, + _stepNameSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepNameSnapshotMeta); + } + if (data.containsKey('step_type_snapshot')) { + context.handle( + _stepTypeSnapshotMeta, + stepTypeSnapshot.isAcceptableOrUnknown( + data['step_type_snapshot']!, + _stepTypeSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepTypeSnapshotMeta); + } + if (data.containsKey('target_value_snapshot')) { + context.handle( + _targetValueSnapshotMeta, + targetValueSnapshot.isAcceptableOrUnknown( + data['target_value_snapshot']!, + _targetValueSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_targetValueSnapshotMeta); + } + if (data.containsKey('has_score_snapshot')) { + context.handle( + _hasScoreSnapshotMeta, + hasScoreSnapshot.isAcceptableOrUnknown( + data['has_score_snapshot']!, + _hasScoreSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_hasScoreSnapshotMeta); + } + 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, + scoreLabelSnapshot.isAcceptableOrUnknown( + data['score_label_snapshot']!, + _scoreLabelSnapshotMeta, + ), + ); + } + if (data.containsKey('score_unit_snapshot')) { + context.handle( + _scoreUnitSnapshotMeta, + scoreUnitSnapshot.isAcceptableOrUnknown( + data['score_unit_snapshot']!, + _scoreUnitSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_snapshot')) { + context.handle( + _targetScoreSnapshotMeta, + targetScoreSnapshot.isAcceptableOrUnknown( + data['target_score_snapshot']!, + _targetScoreSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_time_ms_snapshot')) { + context.handle( + _targetScoreTimeMsSnapshotMeta, + targetScoreTimeMsSnapshot.isAcceptableOrUnknown( + data['target_score_time_ms_snapshot']!, + _targetScoreTimeMsSnapshotMeta, + ), + ); + } + 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), + ); + } + if (data.containsKey('completed_at')) { + context.handle( + _completedAtMeta, + completedAt.isAcceptableOrUnknown( + data['completed_at']!, + _completedAtMeta, + ), + ); + } + if (data.containsKey('actual_time_ms')) { + context.handle( + _actualTimeMsMeta, + actualTimeMs.isAcceptableOrUnknown( + data['actual_time_ms']!, + _actualTimeMsMeta, + ), + ); + } + if (data.containsKey('actual_reps')) { + context.handle( + _actualRepsMeta, + actualReps.isAcceptableOrUnknown(data['actual_reps']!, _actualRepsMeta), + ); + } + if (data.containsKey('actual_score')) { + context.handle( + _actualScoreMeta, + actualScore.isAcceptableOrUnknown( + data['actual_score']!, + _actualScoreMeta, + ), + ); + } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } + if (data.containsKey('note')) { + context.handle( + _noteMeta, + note.isAcceptableOrUnknown(data['note']!, _noteMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ActiveExerciseStepResult map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActiveExerciseStepResult( + 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'], + )!, + programSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}program_snapshot_id'], + )!, + exerciseSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}exercise_snapshot_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'], + )!, + passageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}passage_index'], + )!, + stepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}step_index'], + )!, + stepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_snapshot_id'], + )!, + stepNameSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_name_snapshot'], + )!, + stepTypeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_type_snapshot'], + )!, + targetValueSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_value_snapshot'], + )!, + hasScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}has_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'], + ), + scoreUnitSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_unit_snapshot'], + ), + targetScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}target_score_snapshot'], + ), + targetScoreTimeMsSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_snapshot'], + ), + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + ), + completedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}completed_at'], + ), + actualTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_time_ms'], + ), + actualReps: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_reps'], + ), + actualScore: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}actual_score'], + ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), + note: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}note'], + ), + ); + } + + @override + $ActiveExerciseStepResultsTable createAlias(String alias) { + return $ActiveExerciseStepResultsTable(attachedDatabase, alias); + } +} + +class ActiveExerciseStepResult 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 String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final String stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final String? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final String status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; + const ActiveExerciseStepResult({ + 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.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }); + @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_snapshot_id'] = Variable(programSnapshotId); + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['passage_index'] = Variable(passageIndex); + map['step_index'] = Variable(stepIndex); + map['step_snapshot_id'] = Variable(stepSnapshotId); + map['step_name_snapshot'] = Variable(stepNameSnapshot); + map['step_type_snapshot'] = Variable(stepTypeSnapshot); + map['target_value_snapshot'] = Variable(targetValueSnapshot); + map['has_score_snapshot'] = Variable(hasScoreSnapshot); + if (!nullToAbsent || scoreInputModeSnapshot != null) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot, + ); + } + if (!nullToAbsent || scoreLabelSnapshot != null) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot); + } + if (!nullToAbsent || scoreUnitSnapshot != null) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot); + } + if (!nullToAbsent || targetScoreSnapshot != null) { + map['target_score_snapshot'] = Variable(targetScoreSnapshot); + } + if (!nullToAbsent || targetScoreTimeMsSnapshot != null) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot, + ); + } + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + if (!nullToAbsent || completedAt != null) { + map['completed_at'] = Variable(completedAt); + } + if (!nullToAbsent || actualTimeMs != null) { + map['actual_time_ms'] = Variable(actualTimeMs); + } + if (!nullToAbsent || actualReps != null) { + map['actual_reps'] = Variable(actualReps); + } + if (!nullToAbsent || actualScore != null) { + map['actual_score'] = Variable(actualScore); + } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } + if (!nullToAbsent || note != null) { + map['note'] = Variable(note); + } + return map; + } + + ActiveExerciseStepResultsCompanion toCompanion(bool nullToAbsent) { + return ActiveExerciseStepResultsCompanion( + 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), + programSnapshotId: Value(programSnapshotId), + exerciseSnapshotId: Value(exerciseSnapshotId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + passageIndex: Value(passageIndex), + stepIndex: Value(stepIndex), + stepSnapshotId: Value(stepSnapshotId), + stepNameSnapshot: Value(stepNameSnapshot), + stepTypeSnapshot: Value(stepTypeSnapshot), + targetValueSnapshot: Value(targetValueSnapshot), + hasScoreSnapshot: Value(hasScoreSnapshot), + scoreInputModeSnapshot: scoreInputModeSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreInputModeSnapshot), + scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreLabelSnapshot), + scoreUnitSnapshot: scoreUnitSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreUnitSnapshot), + targetScoreSnapshot: targetScoreSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreSnapshot), + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsSnapshot), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + completedAt: completedAt == null && nullToAbsent + ? const Value.absent() + : Value(completedAt), + actualTimeMs: actualTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualTimeMs), + actualReps: actualReps == null && nullToAbsent + ? const Value.absent() + : Value(actualReps), + actualScore: actualScore == null && nullToAbsent + ? const Value.absent() + : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), + note: note == null && nullToAbsent ? const Value.absent() : Value(note), + ); + } + + factory ActiveExerciseStepResult.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActiveExerciseStepResult( + 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'], + ), + programSnapshotId: serializer.fromJson(json['programSnapshotId']), + exerciseSnapshotId: serializer.fromJson( + json['exerciseSnapshotId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + passageIndex: serializer.fromJson(json['passageIndex']), + stepIndex: serializer.fromJson(json['stepIndex']), + stepSnapshotId: serializer.fromJson(json['stepSnapshotId']), + stepNameSnapshot: serializer.fromJson(json['stepNameSnapshot']), + stepTypeSnapshot: serializer.fromJson(json['stepTypeSnapshot']), + targetValueSnapshot: serializer.fromJson( + json['targetValueSnapshot'], + ), + hasScoreSnapshot: serializer.fromJson(json['hasScoreSnapshot']), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), + scoreLabelSnapshot: serializer.fromJson( + json['scoreLabelSnapshot'], + ), + scoreUnitSnapshot: serializer.fromJson( + json['scoreUnitSnapshot'], + ), + targetScoreSnapshot: serializer.fromJson( + json['targetScoreSnapshot'], + ), + targetScoreTimeMsSnapshot: serializer.fromJson( + json['targetScoreTimeMsSnapshot'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + completedAt: serializer.fromJson(json['completedAt']), + actualTimeMs: serializer.fromJson(json['actualTimeMs']), + actualReps: serializer.fromJson(json['actualReps']), + actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), + note: serializer.fromJson(json['note']), + ); + } + @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, + ), + 'programSnapshotId': serializer.toJson(programSnapshotId), + 'exerciseSnapshotId': serializer.toJson(exerciseSnapshotId), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'passageIndex': serializer.toJson(passageIndex), + 'stepIndex': serializer.toJson(stepIndex), + 'stepSnapshotId': serializer.toJson(stepSnapshotId), + 'stepNameSnapshot': serializer.toJson(stepNameSnapshot), + 'stepTypeSnapshot': serializer.toJson(stepTypeSnapshot), + 'targetValueSnapshot': serializer.toJson(targetValueSnapshot), + 'hasScoreSnapshot': serializer.toJson(hasScoreSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), + 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), + 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), + 'targetScoreSnapshot': serializer.toJson(targetScoreSnapshot), + 'targetScoreTimeMsSnapshot': serializer.toJson( + targetScoreTimeMsSnapshot, + ), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'completedAt': serializer.toJson(completedAt), + 'actualTimeMs': serializer.toJson(actualTimeMs), + 'actualReps': serializer.toJson(actualReps), + 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), + 'note': serializer.toJson(note), + }; + } + + ActiveExerciseStepResult 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, + String? programSnapshotId, + String? exerciseSnapshotId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + int? passageIndex, + int? stepIndex, + String? stepSnapshotId, + String? stepNameSnapshot, + String? stepTypeSnapshot, + int? targetValueSnapshot, + bool? hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + String? status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + }) => ActiveExerciseStepResult( + 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, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot.present + ? scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot.present + ? scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot.present + ? scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot.present + ? targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot.present + ? targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + completedAt: completedAt.present ? completedAt.value : this.completedAt, + 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, + note: note.present ? note.value : this.note, + ); + ActiveExerciseStepResult copyWithCompanion( + ActiveExerciseStepResultsCompanion data, + ) { + return ActiveExerciseStepResult( + 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, + programSnapshotId: data.programSnapshotId.present + ? data.programSnapshotId.value + : this.programSnapshotId, + exerciseSnapshotId: data.exerciseSnapshotId.present + ? data.exerciseSnapshotId.value + : this.exerciseSnapshotId, + 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, + passageIndex: data.passageIndex.present + ? data.passageIndex.value + : this.passageIndex, + stepIndex: data.stepIndex.present ? data.stepIndex.value : this.stepIndex, + stepSnapshotId: data.stepSnapshotId.present + ? data.stepSnapshotId.value + : this.stepSnapshotId, + stepNameSnapshot: data.stepNameSnapshot.present + ? data.stepNameSnapshot.value + : this.stepNameSnapshot, + stepTypeSnapshot: data.stepTypeSnapshot.present + ? data.stepTypeSnapshot.value + : this.stepTypeSnapshot, + targetValueSnapshot: data.targetValueSnapshot.present + ? data.targetValueSnapshot.value + : this.targetValueSnapshot, + hasScoreSnapshot: data.hasScoreSnapshot.present + ? data.hasScoreSnapshot.value + : this.hasScoreSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: data.scoreLabelSnapshot.present + ? data.scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: data.scoreUnitSnapshot.present + ? data.scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: data.targetScoreSnapshot.present + ? data.targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: data.targetScoreTimeMsSnapshot.present + ? data.targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + completedAt: data.completedAt.present + ? data.completedAt.value + : this.completedAt, + actualTimeMs: data.actualTimeMs.present + ? data.actualTimeMs.value + : this.actualTimeMs, + actualReps: data.actualReps.present + ? data.actualReps.value + : this.actualReps, + actualScore: data.actualScore.present + ? data.actualScore.value + : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: data.note.present ? data.note.value : this.note, + ); + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepResult(') + ..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('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + activeWorkoutSessionId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActiveExerciseStepResult && + 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.programSnapshotId == this.programSnapshotId && + other.exerciseSnapshotId == this.exerciseSnapshotId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.passageIndex == this.passageIndex && + other.stepIndex == this.stepIndex && + other.stepSnapshotId == this.stepSnapshotId && + other.stepNameSnapshot == this.stepNameSnapshot && + other.stepTypeSnapshot == this.stepTypeSnapshot && + other.targetValueSnapshot == this.targetValueSnapshot && + other.hasScoreSnapshot == this.hasScoreSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && + other.scoreLabelSnapshot == this.scoreLabelSnapshot && + other.scoreUnitSnapshot == this.scoreUnitSnapshot && + other.targetScoreSnapshot == this.targetScoreSnapshot && + other.targetScoreTimeMsSnapshot == this.targetScoreTimeMsSnapshot && + other.status == this.status && + other.startedAt == this.startedAt && + other.completedAt == this.completedAt && + other.actualTimeMs == this.actualTimeMs && + other.actualReps == this.actualReps && + other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && + other.note == this.note); +} + +class ActiveExerciseStepResultsCompanion + 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 programSnapshotId; + final Value exerciseSnapshotId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value passageIndex; + final Value stepIndex; + final Value stepSnapshotId; + final Value stepNameSnapshot; + final Value stepTypeSnapshot; + final Value targetValueSnapshot; + final Value hasScoreSnapshot; + final Value scoreInputModeSnapshot; + final Value scoreLabelSnapshot; + final Value scoreUnitSnapshot; + final Value targetScoreSnapshot; + final Value targetScoreTimeMsSnapshot; + final Value status; + final Value startedAt; + final Value completedAt; + final Value actualTimeMs; + final Value actualReps; + final Value actualScore; + final Value actualScoreTimeMs; + final Value note; + final Value rowid; + const ActiveExerciseStepResultsCompanion({ + 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.programSnapshotId = const Value.absent(), + this.exerciseSnapshotId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.passageIndex = const Value.absent(), + this.stepIndex = const Value.absent(), + this.stepSnapshotId = const Value.absent(), + this.stepNameSnapshot = const Value.absent(), + this.stepTypeSnapshot = const Value.absent(), + this.targetValueSnapshot = const Value.absent(), + this.hasScoreSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }); + ActiveExerciseStepResultsCompanion.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 String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = 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), + programSnapshotId = Value(programSnapshotId), + exerciseSnapshotId = Value(exerciseSnapshotId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + passageIndex = Value(passageIndex), + stepIndex = Value(stepIndex), + stepSnapshotId = Value(stepSnapshotId), + stepNameSnapshot = Value(stepNameSnapshot), + stepTypeSnapshot = Value(stepTypeSnapshot), + targetValueSnapshot = Value(targetValueSnapshot), + hasScoreSnapshot = Value(hasScoreSnapshot), + status = Value(status); + 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? programSnapshotId, + Expression? exerciseSnapshotId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? passageIndex, + Expression? stepIndex, + Expression? stepSnapshotId, + Expression? stepNameSnapshot, + Expression? stepTypeSnapshot, + Expression? targetValueSnapshot, + Expression? hasScoreSnapshot, + Expression? scoreInputModeSnapshot, + Expression? scoreLabelSnapshot, + Expression? scoreUnitSnapshot, + Expression? targetScoreSnapshot, + Expression? targetScoreTimeMsSnapshot, + Expression? status, + Expression? startedAt, + Expression? completedAt, + Expression? actualTimeMs, + Expression? actualReps, + Expression? actualScore, + Expression? actualScoreTimeMs, + Expression? note, + 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 (programSnapshotId != null) 'program_snapshot_id': programSnapshotId, + if (exerciseSnapshotId != null) + 'exercise_snapshot_id': exerciseSnapshotId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (passageIndex != null) 'passage_index': passageIndex, + if (stepIndex != null) 'step_index': stepIndex, + if (stepSnapshotId != null) 'step_snapshot_id': stepSnapshotId, + if (stepNameSnapshot != null) 'step_name_snapshot': stepNameSnapshot, + if (stepTypeSnapshot != null) 'step_type_snapshot': stepTypeSnapshot, + if (targetValueSnapshot != null) + 'target_value_snapshot': targetValueSnapshot, + if (hasScoreSnapshot != null) 'has_score_snapshot': hasScoreSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, + if (scoreLabelSnapshot != null) + 'score_label_snapshot': scoreLabelSnapshot, + if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, + if (targetScoreSnapshot != null) + 'target_score_snapshot': targetScoreSnapshot, + if (targetScoreTimeMsSnapshot != null) + 'target_score_time_ms_snapshot': targetScoreTimeMsSnapshot, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (completedAt != null) 'completed_at': completedAt, + 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 (note != null) 'note': note, + if (rowid != null) 'rowid': rowid, + }); + } + + ActiveExerciseStepResultsCompanion 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? programSnapshotId, + Value? exerciseSnapshotId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? passageIndex, + Value? stepIndex, + Value? stepSnapshotId, + Value? stepNameSnapshot, + Value? stepTypeSnapshot, + Value? targetValueSnapshot, + Value? hasScoreSnapshot, + Value? scoreInputModeSnapshot, + Value? scoreLabelSnapshot, + Value? scoreUnitSnapshot, + Value? targetScoreSnapshot, + Value? targetScoreTimeMsSnapshot, + Value? status, + Value? startedAt, + Value? completedAt, + Value? actualTimeMs, + Value? actualReps, + Value? actualScore, + Value? actualScoreTimeMs, + Value? note, + Value? rowid, + }) { + return ActiveExerciseStepResultsCompanion( + 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, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot ?? this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot ?? this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + completedAt: completedAt ?? this.completedAt, + actualTimeMs: actualTimeMs ?? this.actualTimeMs, + actualReps: actualReps ?? this.actualReps, + actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, + note: note ?? this.note, + 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 (programSnapshotId.present) { + map['program_snapshot_id'] = Variable(programSnapshotId.value); + } + if (exerciseSnapshotId.present) { + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId.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 (passageIndex.present) { + map['passage_index'] = Variable(passageIndex.value); + } + if (stepIndex.present) { + map['step_index'] = Variable(stepIndex.value); + } + if (stepSnapshotId.present) { + map['step_snapshot_id'] = Variable(stepSnapshotId.value); + } + if (stepNameSnapshot.present) { + map['step_name_snapshot'] = Variable(stepNameSnapshot.value); + } + if (stepTypeSnapshot.present) { + map['step_type_snapshot'] = Variable(stepTypeSnapshot.value); + } + if (targetValueSnapshot.present) { + map['target_value_snapshot'] = Variable(targetValueSnapshot.value); + } + if (hasScoreSnapshot.present) { + map['has_score_snapshot'] = Variable(hasScoreSnapshot.value); + } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } + if (scoreLabelSnapshot.present) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); + } + if (scoreUnitSnapshot.present) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot.value); + } + if (targetScoreSnapshot.present) { + map['target_score_snapshot'] = Variable( + targetScoreSnapshot.value, + ); + } + if (targetScoreTimeMsSnapshot.present) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot.value, + ); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (completedAt.present) { + map['completed_at'] = Variable(completedAt.value); + } + if (actualTimeMs.present) { + map['actual_time_ms'] = Variable(actualTimeMs.value); + } + if (actualReps.present) { + map['actual_reps'] = Variable(actualReps.value); + } + if (actualScore.present) { + map['actual_score'] = Variable(actualScore.value); + } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } + if (note.present) { + map['note'] = Variable(note.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActiveExerciseStepResultsCompanion(') + ..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('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $ActiveRestStatesTable extends ActiveRestStates with TableInfo<$ActiveRestStatesTable, ActiveRestState> { @override @@ -17751,6 +21186,2130 @@ class WorkoutHistorySetResultsCompanion } } +class $WorkoutHistoryStepResultsTable extends WorkoutHistoryStepResults + with TableInfo<$WorkoutHistoryStepResultsTable, WorkoutHistoryStepResult> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $WorkoutHistoryStepResultsTable(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 _workoutHistoryIdMeta = const VerificationMeta( + 'workoutHistoryId', + ); + @override + late final GeneratedColumn workoutHistoryId = GeneratedColumn( + 'workout_history_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES workout_history (id)', + ), + ); + static const VerificationMeta _programSnapshotIdMeta = const VerificationMeta( + 'programSnapshotId', + ); + @override + late final GeneratedColumn programSnapshotId = + GeneratedColumn( + 'program_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _exerciseSnapshotIdMeta = + const VerificationMeta('exerciseSnapshotId'); + @override + late final GeneratedColumn exerciseSnapshotId = + GeneratedColumn( + 'exercise_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + 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 _passageIndexMeta = const VerificationMeta( + 'passageIndex', + ); + @override + late final GeneratedColumn passageIndex = GeneratedColumn( + 'passage_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepIndexMeta = const VerificationMeta( + 'stepIndex', + ); + @override + late final GeneratedColumn stepIndex = GeneratedColumn( + 'step_index', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepSnapshotIdMeta = const VerificationMeta( + 'stepSnapshotId', + ); + @override + late final GeneratedColumn stepSnapshotId = GeneratedColumn( + 'step_snapshot_id', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepNameSnapshotMeta = const VerificationMeta( + 'stepNameSnapshot', + ); + @override + late final GeneratedColumn stepNameSnapshot = GeneratedColumn( + 'step_name_snapshot', + aliasedName, + false, + additionalChecks: GeneratedColumn.checkTextLength(minTextLength: 1), + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _stepTypeSnapshotMeta = const VerificationMeta( + 'stepTypeSnapshot', + ); + @override + late final GeneratedColumn stepTypeSnapshot = GeneratedColumn( + 'step_type_snapshot', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + ); + static const VerificationMeta _targetValueSnapshotMeta = + const VerificationMeta('targetValueSnapshot'); + @override + late final GeneratedColumn targetValueSnapshot = GeneratedColumn( + 'target_value_snapshot', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + ); + static const VerificationMeta _hasScoreSnapshotMeta = const VerificationMeta( + 'hasScoreSnapshot', + ); + @override + late final GeneratedColumn hasScoreSnapshot = GeneratedColumn( + 'has_score_snapshot', + aliasedName, + false, + type: DriftSqlType.bool, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'CHECK ("has_score_snapshot" IN (0, 1))', + ), + ); + static const VerificationMeta _scoreInputModeSnapshotMeta = + const VerificationMeta('scoreInputModeSnapshot'); + @override + late final GeneratedColumn scoreInputModeSnapshot = + GeneratedColumn( + 'score_input_mode_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreLabelSnapshotMeta = + const VerificationMeta('scoreLabelSnapshot'); + @override + late final GeneratedColumn scoreLabelSnapshot = + GeneratedColumn( + 'score_label_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _scoreUnitSnapshotMeta = const VerificationMeta( + 'scoreUnitSnapshot', + ); + @override + late final GeneratedColumn scoreUnitSnapshot = + GeneratedColumn( + 'score_unit_snapshot', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + static const VerificationMeta _targetScoreSnapshotMeta = + const VerificationMeta('targetScoreSnapshot'); + @override + late final GeneratedColumn targetScoreSnapshot = + GeneratedColumn( + 'target_score_snapshot', + aliasedName, + true, + 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 _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, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _completedAtMeta = const VerificationMeta( + 'completedAt', + ); + @override + late final GeneratedColumn completedAt = GeneratedColumn( + 'completed_at', + aliasedName, + true, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualTimeMsMeta = const VerificationMeta( + 'actualTimeMs', + ); + @override + late final GeneratedColumn actualTimeMs = GeneratedColumn( + 'actual_time_ms', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualRepsMeta = const VerificationMeta( + 'actualReps', + ); + @override + late final GeneratedColumn actualReps = GeneratedColumn( + 'actual_reps', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + ); + static const VerificationMeta _actualScoreMeta = const VerificationMeta( + 'actualScore', + ); + @override + late final GeneratedColumn actualScore = GeneratedColumn( + 'actual_score', + aliasedName, + true, + 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 _noteMeta = const VerificationMeta('note'); + @override + late final GeneratedColumn note = GeneratedColumn( + 'note', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + ); + @override + List get $columns => [ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + workoutHistoryId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'workout_history_step_results'; + @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('workout_history_id')) { + context.handle( + _workoutHistoryIdMeta, + workoutHistoryId.isAcceptableOrUnknown( + data['workout_history_id']!, + _workoutHistoryIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_workoutHistoryIdMeta); + } + if (data.containsKey('program_snapshot_id')) { + context.handle( + _programSnapshotIdMeta, + programSnapshotId.isAcceptableOrUnknown( + data['program_snapshot_id']!, + _programSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_programSnapshotIdMeta); + } + if (data.containsKey('exercise_snapshot_id')) { + context.handle( + _exerciseSnapshotIdMeta, + exerciseSnapshotId.isAcceptableOrUnknown( + data['exercise_snapshot_id']!, + _exerciseSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_exerciseSnapshotIdMeta); + } + 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('passage_index')) { + context.handle( + _passageIndexMeta, + passageIndex.isAcceptableOrUnknown( + data['passage_index']!, + _passageIndexMeta, + ), + ); + } else if (isInserting) { + context.missing(_passageIndexMeta); + } + if (data.containsKey('step_index')) { + context.handle( + _stepIndexMeta, + stepIndex.isAcceptableOrUnknown(data['step_index']!, _stepIndexMeta), + ); + } else if (isInserting) { + context.missing(_stepIndexMeta); + } + if (data.containsKey('step_snapshot_id')) { + context.handle( + _stepSnapshotIdMeta, + stepSnapshotId.isAcceptableOrUnknown( + data['step_snapshot_id']!, + _stepSnapshotIdMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepSnapshotIdMeta); + } + if (data.containsKey('step_name_snapshot')) { + context.handle( + _stepNameSnapshotMeta, + stepNameSnapshot.isAcceptableOrUnknown( + data['step_name_snapshot']!, + _stepNameSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepNameSnapshotMeta); + } + if (data.containsKey('step_type_snapshot')) { + context.handle( + _stepTypeSnapshotMeta, + stepTypeSnapshot.isAcceptableOrUnknown( + data['step_type_snapshot']!, + _stepTypeSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_stepTypeSnapshotMeta); + } + if (data.containsKey('target_value_snapshot')) { + context.handle( + _targetValueSnapshotMeta, + targetValueSnapshot.isAcceptableOrUnknown( + data['target_value_snapshot']!, + _targetValueSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_targetValueSnapshotMeta); + } + if (data.containsKey('has_score_snapshot')) { + context.handle( + _hasScoreSnapshotMeta, + hasScoreSnapshot.isAcceptableOrUnknown( + data['has_score_snapshot']!, + _hasScoreSnapshotMeta, + ), + ); + } else if (isInserting) { + context.missing(_hasScoreSnapshotMeta); + } + 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, + scoreLabelSnapshot.isAcceptableOrUnknown( + data['score_label_snapshot']!, + _scoreLabelSnapshotMeta, + ), + ); + } + if (data.containsKey('score_unit_snapshot')) { + context.handle( + _scoreUnitSnapshotMeta, + scoreUnitSnapshot.isAcceptableOrUnknown( + data['score_unit_snapshot']!, + _scoreUnitSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_snapshot')) { + context.handle( + _targetScoreSnapshotMeta, + targetScoreSnapshot.isAcceptableOrUnknown( + data['target_score_snapshot']!, + _targetScoreSnapshotMeta, + ), + ); + } + if (data.containsKey('target_score_time_ms_snapshot')) { + context.handle( + _targetScoreTimeMsSnapshotMeta, + targetScoreTimeMsSnapshot.isAcceptableOrUnknown( + data['target_score_time_ms_snapshot']!, + _targetScoreTimeMsSnapshotMeta, + ), + ); + } + 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), + ); + } + if (data.containsKey('completed_at')) { + context.handle( + _completedAtMeta, + completedAt.isAcceptableOrUnknown( + data['completed_at']!, + _completedAtMeta, + ), + ); + } + if (data.containsKey('actual_time_ms')) { + context.handle( + _actualTimeMsMeta, + actualTimeMs.isAcceptableOrUnknown( + data['actual_time_ms']!, + _actualTimeMsMeta, + ), + ); + } + if (data.containsKey('actual_reps')) { + context.handle( + _actualRepsMeta, + actualReps.isAcceptableOrUnknown(data['actual_reps']!, _actualRepsMeta), + ); + } + if (data.containsKey('actual_score')) { + context.handle( + _actualScoreMeta, + actualScore.isAcceptableOrUnknown( + data['actual_score']!, + _actualScoreMeta, + ), + ); + } + if (data.containsKey('actual_score_time_ms')) { + context.handle( + _actualScoreTimeMsMeta, + actualScoreTimeMs.isAcceptableOrUnknown( + data['actual_score_time_ms']!, + _actualScoreTimeMsMeta, + ), + ); + } + if (data.containsKey('note')) { + context.handle( + _noteMeta, + note.isAcceptableOrUnknown(data['note']!, _noteMeta), + ); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + WorkoutHistoryStepResult map( + Map data, { + String? tablePrefix, + }) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return WorkoutHistoryStepResult( + 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'], + ), + workoutHistoryId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}workout_history_id'], + )!, + programSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}program_snapshot_id'], + )!, + exerciseSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}exercise_snapshot_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'], + )!, + passageIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}passage_index'], + )!, + stepIndex: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}step_index'], + )!, + stepSnapshotId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_snapshot_id'], + )!, + stepNameSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_name_snapshot'], + )!, + stepTypeSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}step_type_snapshot'], + )!, + targetValueSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_value_snapshot'], + )!, + hasScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.bool, + data['${effectivePrefix}has_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'], + ), + scoreUnitSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}score_unit_snapshot'], + ), + targetScoreSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}target_score_snapshot'], + ), + targetScoreTimeMsSnapshot: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}target_score_time_ms_snapshot'], + ), + status: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}status'], + )!, + startedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}started_at'], + ), + completedAt: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}completed_at'], + ), + actualTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_time_ms'], + ), + actualReps: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_reps'], + ), + actualScore: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}actual_score'], + ), + actualScoreTimeMs: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}actual_score_time_ms'], + ), + note: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}note'], + ), + ); + } + + @override + $WorkoutHistoryStepResultsTable createAlias(String alias) { + return $WorkoutHistoryStepResultsTable(attachedDatabase, alias); + } +} + +class WorkoutHistoryStepResult 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 workoutHistoryId; + final String programSnapshotId; + final String exerciseSnapshotId; + final int programIndex; + final int exerciseIndex; + final int setIndex; + final int passageIndex; + final int stepIndex; + final String stepSnapshotId; + final String stepNameSnapshot; + final String stepTypeSnapshot; + final int targetValueSnapshot; + final bool hasScoreSnapshot; + final String? scoreInputModeSnapshot; + final String? scoreLabelSnapshot; + final String? scoreUnitSnapshot; + final double? targetScoreSnapshot; + final int? targetScoreTimeMsSnapshot; + final String status; + final DateTime? startedAt; + final DateTime? completedAt; + final int? actualTimeMs; + final int? actualReps; + final double? actualScore; + final int? actualScoreTimeMs; + final String? note; + const WorkoutHistoryStepResult({ + 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.workoutHistoryId, + required this.programSnapshotId, + required this.exerciseSnapshotId, + required this.programIndex, + required this.exerciseIndex, + required this.setIndex, + required this.passageIndex, + required this.stepIndex, + required this.stepSnapshotId, + required this.stepNameSnapshot, + required this.stepTypeSnapshot, + required this.targetValueSnapshot, + required this.hasScoreSnapshot, + this.scoreInputModeSnapshot, + this.scoreLabelSnapshot, + this.scoreUnitSnapshot, + this.targetScoreSnapshot, + this.targetScoreTimeMsSnapshot, + required this.status, + this.startedAt, + this.completedAt, + this.actualTimeMs, + this.actualReps, + this.actualScore, + this.actualScoreTimeMs, + this.note, + }); + @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['workout_history_id'] = Variable(workoutHistoryId); + map['program_snapshot_id'] = Variable(programSnapshotId); + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId); + map['program_index'] = Variable(programIndex); + map['exercise_index'] = Variable(exerciseIndex); + map['set_index'] = Variable(setIndex); + map['passage_index'] = Variable(passageIndex); + map['step_index'] = Variable(stepIndex); + map['step_snapshot_id'] = Variable(stepSnapshotId); + map['step_name_snapshot'] = Variable(stepNameSnapshot); + map['step_type_snapshot'] = Variable(stepTypeSnapshot); + map['target_value_snapshot'] = Variable(targetValueSnapshot); + map['has_score_snapshot'] = Variable(hasScoreSnapshot); + if (!nullToAbsent || scoreInputModeSnapshot != null) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot, + ); + } + if (!nullToAbsent || scoreLabelSnapshot != null) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot); + } + if (!nullToAbsent || scoreUnitSnapshot != null) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot); + } + if (!nullToAbsent || targetScoreSnapshot != null) { + map['target_score_snapshot'] = Variable(targetScoreSnapshot); + } + if (!nullToAbsent || targetScoreTimeMsSnapshot != null) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot, + ); + } + map['status'] = Variable(status); + if (!nullToAbsent || startedAt != null) { + map['started_at'] = Variable(startedAt); + } + if (!nullToAbsent || completedAt != null) { + map['completed_at'] = Variable(completedAt); + } + if (!nullToAbsent || actualTimeMs != null) { + map['actual_time_ms'] = Variable(actualTimeMs); + } + if (!nullToAbsent || actualReps != null) { + map['actual_reps'] = Variable(actualReps); + } + if (!nullToAbsent || actualScore != null) { + map['actual_score'] = Variable(actualScore); + } + if (!nullToAbsent || actualScoreTimeMs != null) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs); + } + if (!nullToAbsent || note != null) { + map['note'] = Variable(note); + } + return map; + } + + WorkoutHistoryStepResultsCompanion toCompanion(bool nullToAbsent) { + return WorkoutHistoryStepResultsCompanion( + 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), + workoutHistoryId: Value(workoutHistoryId), + programSnapshotId: Value(programSnapshotId), + exerciseSnapshotId: Value(exerciseSnapshotId), + programIndex: Value(programIndex), + exerciseIndex: Value(exerciseIndex), + setIndex: Value(setIndex), + passageIndex: Value(passageIndex), + stepIndex: Value(stepIndex), + stepSnapshotId: Value(stepSnapshotId), + stepNameSnapshot: Value(stepNameSnapshot), + stepTypeSnapshot: Value(stepTypeSnapshot), + targetValueSnapshot: Value(targetValueSnapshot), + hasScoreSnapshot: Value(hasScoreSnapshot), + scoreInputModeSnapshot: scoreInputModeSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreInputModeSnapshot), + scoreLabelSnapshot: scoreLabelSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreLabelSnapshot), + scoreUnitSnapshot: scoreUnitSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(scoreUnitSnapshot), + targetScoreSnapshot: targetScoreSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreSnapshot), + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot == null && nullToAbsent + ? const Value.absent() + : Value(targetScoreTimeMsSnapshot), + status: Value(status), + startedAt: startedAt == null && nullToAbsent + ? const Value.absent() + : Value(startedAt), + completedAt: completedAt == null && nullToAbsent + ? const Value.absent() + : Value(completedAt), + actualTimeMs: actualTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualTimeMs), + actualReps: actualReps == null && nullToAbsent + ? const Value.absent() + : Value(actualReps), + actualScore: actualScore == null && nullToAbsent + ? const Value.absent() + : Value(actualScore), + actualScoreTimeMs: actualScoreTimeMs == null && nullToAbsent + ? const Value.absent() + : Value(actualScoreTimeMs), + note: note == null && nullToAbsent ? const Value.absent() : Value(note), + ); + } + + factory WorkoutHistoryStepResult.fromJson( + Map json, { + ValueSerializer? serializer, + }) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return WorkoutHistoryStepResult( + 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']), + workoutHistoryId: serializer.fromJson(json['workoutHistoryId']), + programSnapshotId: serializer.fromJson(json['programSnapshotId']), + exerciseSnapshotId: serializer.fromJson( + json['exerciseSnapshotId'], + ), + programIndex: serializer.fromJson(json['programIndex']), + exerciseIndex: serializer.fromJson(json['exerciseIndex']), + setIndex: serializer.fromJson(json['setIndex']), + passageIndex: serializer.fromJson(json['passageIndex']), + stepIndex: serializer.fromJson(json['stepIndex']), + stepSnapshotId: serializer.fromJson(json['stepSnapshotId']), + stepNameSnapshot: serializer.fromJson(json['stepNameSnapshot']), + stepTypeSnapshot: serializer.fromJson(json['stepTypeSnapshot']), + targetValueSnapshot: serializer.fromJson( + json['targetValueSnapshot'], + ), + hasScoreSnapshot: serializer.fromJson(json['hasScoreSnapshot']), + scoreInputModeSnapshot: serializer.fromJson( + json['scoreInputModeSnapshot'], + ), + scoreLabelSnapshot: serializer.fromJson( + json['scoreLabelSnapshot'], + ), + scoreUnitSnapshot: serializer.fromJson( + json['scoreUnitSnapshot'], + ), + targetScoreSnapshot: serializer.fromJson( + json['targetScoreSnapshot'], + ), + targetScoreTimeMsSnapshot: serializer.fromJson( + json['targetScoreTimeMsSnapshot'], + ), + status: serializer.fromJson(json['status']), + startedAt: serializer.fromJson(json['startedAt']), + completedAt: serializer.fromJson(json['completedAt']), + actualTimeMs: serializer.fromJson(json['actualTimeMs']), + actualReps: serializer.fromJson(json['actualReps']), + actualScore: serializer.fromJson(json['actualScore']), + actualScoreTimeMs: serializer.fromJson(json['actualScoreTimeMs']), + note: serializer.fromJson(json['note']), + ); + } + @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), + 'workoutHistoryId': serializer.toJson(workoutHistoryId), + 'programSnapshotId': serializer.toJson(programSnapshotId), + 'exerciseSnapshotId': serializer.toJson(exerciseSnapshotId), + 'programIndex': serializer.toJson(programIndex), + 'exerciseIndex': serializer.toJson(exerciseIndex), + 'setIndex': serializer.toJson(setIndex), + 'passageIndex': serializer.toJson(passageIndex), + 'stepIndex': serializer.toJson(stepIndex), + 'stepSnapshotId': serializer.toJson(stepSnapshotId), + 'stepNameSnapshot': serializer.toJson(stepNameSnapshot), + 'stepTypeSnapshot': serializer.toJson(stepTypeSnapshot), + 'targetValueSnapshot': serializer.toJson(targetValueSnapshot), + 'hasScoreSnapshot': serializer.toJson(hasScoreSnapshot), + 'scoreInputModeSnapshot': serializer.toJson( + scoreInputModeSnapshot, + ), + 'scoreLabelSnapshot': serializer.toJson(scoreLabelSnapshot), + 'scoreUnitSnapshot': serializer.toJson(scoreUnitSnapshot), + 'targetScoreSnapshot': serializer.toJson(targetScoreSnapshot), + 'targetScoreTimeMsSnapshot': serializer.toJson( + targetScoreTimeMsSnapshot, + ), + 'status': serializer.toJson(status), + 'startedAt': serializer.toJson(startedAt), + 'completedAt': serializer.toJson(completedAt), + 'actualTimeMs': serializer.toJson(actualTimeMs), + 'actualReps': serializer.toJson(actualReps), + 'actualScore': serializer.toJson(actualScore), + 'actualScoreTimeMs': serializer.toJson(actualScoreTimeMs), + 'note': serializer.toJson(note), + }; + } + + WorkoutHistoryStepResult 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? workoutHistoryId, + String? programSnapshotId, + String? exerciseSnapshotId, + int? programIndex, + int? exerciseIndex, + int? setIndex, + int? passageIndex, + int? stepIndex, + String? stepSnapshotId, + String? stepNameSnapshot, + String? stepTypeSnapshot, + int? targetValueSnapshot, + bool? hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + String? status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + }) => WorkoutHistoryStepResult( + 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, + workoutHistoryId: workoutHistoryId ?? this.workoutHistoryId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot.present + ? scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot.present + ? scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot.present + ? scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot.present + ? targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot.present + ? targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt.present ? startedAt.value : this.startedAt, + completedAt: completedAt.present ? completedAt.value : this.completedAt, + 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, + note: note.present ? note.value : this.note, + ); + WorkoutHistoryStepResult copyWithCompanion( + WorkoutHistoryStepResultsCompanion data, + ) { + return WorkoutHistoryStepResult( + 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, + workoutHistoryId: data.workoutHistoryId.present + ? data.workoutHistoryId.value + : this.workoutHistoryId, + programSnapshotId: data.programSnapshotId.present + ? data.programSnapshotId.value + : this.programSnapshotId, + exerciseSnapshotId: data.exerciseSnapshotId.present + ? data.exerciseSnapshotId.value + : this.exerciseSnapshotId, + 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, + passageIndex: data.passageIndex.present + ? data.passageIndex.value + : this.passageIndex, + stepIndex: data.stepIndex.present ? data.stepIndex.value : this.stepIndex, + stepSnapshotId: data.stepSnapshotId.present + ? data.stepSnapshotId.value + : this.stepSnapshotId, + stepNameSnapshot: data.stepNameSnapshot.present + ? data.stepNameSnapshot.value + : this.stepNameSnapshot, + stepTypeSnapshot: data.stepTypeSnapshot.present + ? data.stepTypeSnapshot.value + : this.stepTypeSnapshot, + targetValueSnapshot: data.targetValueSnapshot.present + ? data.targetValueSnapshot.value + : this.targetValueSnapshot, + hasScoreSnapshot: data.hasScoreSnapshot.present + ? data.hasScoreSnapshot.value + : this.hasScoreSnapshot, + scoreInputModeSnapshot: data.scoreInputModeSnapshot.present + ? data.scoreInputModeSnapshot.value + : this.scoreInputModeSnapshot, + scoreLabelSnapshot: data.scoreLabelSnapshot.present + ? data.scoreLabelSnapshot.value + : this.scoreLabelSnapshot, + scoreUnitSnapshot: data.scoreUnitSnapshot.present + ? data.scoreUnitSnapshot.value + : this.scoreUnitSnapshot, + targetScoreSnapshot: data.targetScoreSnapshot.present + ? data.targetScoreSnapshot.value + : this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: data.targetScoreTimeMsSnapshot.present + ? data.targetScoreTimeMsSnapshot.value + : this.targetScoreTimeMsSnapshot, + status: data.status.present ? data.status.value : this.status, + startedAt: data.startedAt.present ? data.startedAt.value : this.startedAt, + completedAt: data.completedAt.present + ? data.completedAt.value + : this.completedAt, + actualTimeMs: data.actualTimeMs.present + ? data.actualTimeMs.value + : this.actualTimeMs, + actualReps: data.actualReps.present + ? data.actualReps.value + : this.actualReps, + actualScore: data.actualScore.present + ? data.actualScore.value + : this.actualScore, + actualScoreTimeMs: data.actualScoreTimeMs.present + ? data.actualScoreTimeMs.value + : this.actualScoreTimeMs, + note: data.note.present ? data.note.value : this.note, + ); + } + + @override + String toString() { + return (StringBuffer('WorkoutHistoryStepResult(') + ..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('workoutHistoryId: $workoutHistoryId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hashAll([ + id, + createdAt, + updatedAt, + deletedAt, + schemaVersion, + syncState, + localRevision, + originDeviceId, + futureOwnerProfileId, + lastSyncedAt, + remoteRevision, + workoutHistoryId, + programSnapshotId, + exerciseSnapshotId, + programIndex, + exerciseIndex, + setIndex, + passageIndex, + stepIndex, + stepSnapshotId, + stepNameSnapshot, + stepTypeSnapshot, + targetValueSnapshot, + hasScoreSnapshot, + scoreInputModeSnapshot, + scoreLabelSnapshot, + scoreUnitSnapshot, + targetScoreSnapshot, + targetScoreTimeMsSnapshot, + status, + startedAt, + completedAt, + actualTimeMs, + actualReps, + actualScore, + actualScoreTimeMs, + note, + ]); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is WorkoutHistoryStepResult && + 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.workoutHistoryId == this.workoutHistoryId && + other.programSnapshotId == this.programSnapshotId && + other.exerciseSnapshotId == this.exerciseSnapshotId && + other.programIndex == this.programIndex && + other.exerciseIndex == this.exerciseIndex && + other.setIndex == this.setIndex && + other.passageIndex == this.passageIndex && + other.stepIndex == this.stepIndex && + other.stepSnapshotId == this.stepSnapshotId && + other.stepNameSnapshot == this.stepNameSnapshot && + other.stepTypeSnapshot == this.stepTypeSnapshot && + other.targetValueSnapshot == this.targetValueSnapshot && + other.hasScoreSnapshot == this.hasScoreSnapshot && + other.scoreInputModeSnapshot == this.scoreInputModeSnapshot && + other.scoreLabelSnapshot == this.scoreLabelSnapshot && + other.scoreUnitSnapshot == this.scoreUnitSnapshot && + other.targetScoreSnapshot == this.targetScoreSnapshot && + other.targetScoreTimeMsSnapshot == this.targetScoreTimeMsSnapshot && + other.status == this.status && + other.startedAt == this.startedAt && + other.completedAt == this.completedAt && + other.actualTimeMs == this.actualTimeMs && + other.actualReps == this.actualReps && + other.actualScore == this.actualScore && + other.actualScoreTimeMs == this.actualScoreTimeMs && + other.note == this.note); +} + +class WorkoutHistoryStepResultsCompanion + 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 workoutHistoryId; + final Value programSnapshotId; + final Value exerciseSnapshotId; + final Value programIndex; + final Value exerciseIndex; + final Value setIndex; + final Value passageIndex; + final Value stepIndex; + final Value stepSnapshotId; + final Value stepNameSnapshot; + final Value stepTypeSnapshot; + final Value targetValueSnapshot; + final Value hasScoreSnapshot; + final Value scoreInputModeSnapshot; + final Value scoreLabelSnapshot; + final Value scoreUnitSnapshot; + final Value targetScoreSnapshot; + final Value targetScoreTimeMsSnapshot; + final Value status; + final Value startedAt; + final Value completedAt; + final Value actualTimeMs; + final Value actualReps; + final Value actualScore; + final Value actualScoreTimeMs; + final Value note; + final Value rowid; + const WorkoutHistoryStepResultsCompanion({ + 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.workoutHistoryId = const Value.absent(), + this.programSnapshotId = const Value.absent(), + this.exerciseSnapshotId = const Value.absent(), + this.programIndex = const Value.absent(), + this.exerciseIndex = const Value.absent(), + this.setIndex = const Value.absent(), + this.passageIndex = const Value.absent(), + this.stepIndex = const Value.absent(), + this.stepSnapshotId = const Value.absent(), + this.stepNameSnapshot = const Value.absent(), + this.stepTypeSnapshot = const Value.absent(), + this.targetValueSnapshot = const Value.absent(), + this.hasScoreSnapshot = const Value.absent(), + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + this.status = const Value.absent(), + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = const Value.absent(), + this.rowid = const Value.absent(), + }); + WorkoutHistoryStepResultsCompanion.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 workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + this.scoreInputModeSnapshot = const Value.absent(), + this.scoreLabelSnapshot = const Value.absent(), + this.scoreUnitSnapshot = const Value.absent(), + this.targetScoreSnapshot = const Value.absent(), + this.targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + this.startedAt = const Value.absent(), + this.completedAt = const Value.absent(), + this.actualTimeMs = const Value.absent(), + this.actualReps = const Value.absent(), + this.actualScore = const Value.absent(), + this.actualScoreTimeMs = const Value.absent(), + this.note = 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), + workoutHistoryId = Value(workoutHistoryId), + programSnapshotId = Value(programSnapshotId), + exerciseSnapshotId = Value(exerciseSnapshotId), + programIndex = Value(programIndex), + exerciseIndex = Value(exerciseIndex), + setIndex = Value(setIndex), + passageIndex = Value(passageIndex), + stepIndex = Value(stepIndex), + stepSnapshotId = Value(stepSnapshotId), + stepNameSnapshot = Value(stepNameSnapshot), + stepTypeSnapshot = Value(stepTypeSnapshot), + targetValueSnapshot = Value(targetValueSnapshot), + hasScoreSnapshot = Value(hasScoreSnapshot), + status = Value(status); + 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? workoutHistoryId, + Expression? programSnapshotId, + Expression? exerciseSnapshotId, + Expression? programIndex, + Expression? exerciseIndex, + Expression? setIndex, + Expression? passageIndex, + Expression? stepIndex, + Expression? stepSnapshotId, + Expression? stepNameSnapshot, + Expression? stepTypeSnapshot, + Expression? targetValueSnapshot, + Expression? hasScoreSnapshot, + Expression? scoreInputModeSnapshot, + Expression? scoreLabelSnapshot, + Expression? scoreUnitSnapshot, + Expression? targetScoreSnapshot, + Expression? targetScoreTimeMsSnapshot, + Expression? status, + Expression? startedAt, + Expression? completedAt, + Expression? actualTimeMs, + Expression? actualReps, + Expression? actualScore, + Expression? actualScoreTimeMs, + Expression? note, + 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 (workoutHistoryId != null) 'workout_history_id': workoutHistoryId, + if (programSnapshotId != null) 'program_snapshot_id': programSnapshotId, + if (exerciseSnapshotId != null) + 'exercise_snapshot_id': exerciseSnapshotId, + if (programIndex != null) 'program_index': programIndex, + if (exerciseIndex != null) 'exercise_index': exerciseIndex, + if (setIndex != null) 'set_index': setIndex, + if (passageIndex != null) 'passage_index': passageIndex, + if (stepIndex != null) 'step_index': stepIndex, + if (stepSnapshotId != null) 'step_snapshot_id': stepSnapshotId, + if (stepNameSnapshot != null) 'step_name_snapshot': stepNameSnapshot, + if (stepTypeSnapshot != null) 'step_type_snapshot': stepTypeSnapshot, + if (targetValueSnapshot != null) + 'target_value_snapshot': targetValueSnapshot, + if (hasScoreSnapshot != null) 'has_score_snapshot': hasScoreSnapshot, + if (scoreInputModeSnapshot != null) + 'score_input_mode_snapshot': scoreInputModeSnapshot, + if (scoreLabelSnapshot != null) + 'score_label_snapshot': scoreLabelSnapshot, + if (scoreUnitSnapshot != null) 'score_unit_snapshot': scoreUnitSnapshot, + if (targetScoreSnapshot != null) + 'target_score_snapshot': targetScoreSnapshot, + if (targetScoreTimeMsSnapshot != null) + 'target_score_time_ms_snapshot': targetScoreTimeMsSnapshot, + if (status != null) 'status': status, + if (startedAt != null) 'started_at': startedAt, + if (completedAt != null) 'completed_at': completedAt, + 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 (note != null) 'note': note, + if (rowid != null) 'rowid': rowid, + }); + } + + WorkoutHistoryStepResultsCompanion copyWith({ + Value? id, + Value? createdAt, + Value? updatedAt, + Value? deletedAt, + Value? schemaVersion, + Value? syncState, + Value? localRevision, + Value? originDeviceId, + Value? futureOwnerProfileId, + Value? lastSyncedAt, + Value? remoteRevision, + Value? workoutHistoryId, + Value? programSnapshotId, + Value? exerciseSnapshotId, + Value? programIndex, + Value? exerciseIndex, + Value? setIndex, + Value? passageIndex, + Value? stepIndex, + Value? stepSnapshotId, + Value? stepNameSnapshot, + Value? stepTypeSnapshot, + Value? targetValueSnapshot, + Value? hasScoreSnapshot, + Value? scoreInputModeSnapshot, + Value? scoreLabelSnapshot, + Value? scoreUnitSnapshot, + Value? targetScoreSnapshot, + Value? targetScoreTimeMsSnapshot, + Value? status, + Value? startedAt, + Value? completedAt, + Value? actualTimeMs, + Value? actualReps, + Value? actualScore, + Value? actualScoreTimeMs, + Value? note, + Value? rowid, + }) { + return WorkoutHistoryStepResultsCompanion( + 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, + workoutHistoryId: workoutHistoryId ?? this.workoutHistoryId, + programSnapshotId: programSnapshotId ?? this.programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId ?? this.exerciseSnapshotId, + programIndex: programIndex ?? this.programIndex, + exerciseIndex: exerciseIndex ?? this.exerciseIndex, + setIndex: setIndex ?? this.setIndex, + passageIndex: passageIndex ?? this.passageIndex, + stepIndex: stepIndex ?? this.stepIndex, + stepSnapshotId: stepSnapshotId ?? this.stepSnapshotId, + stepNameSnapshot: stepNameSnapshot ?? this.stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot ?? this.stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot ?? this.targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot ?? this.hasScoreSnapshot, + scoreInputModeSnapshot: + scoreInputModeSnapshot ?? this.scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot ?? this.scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot ?? this.scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot ?? this.targetScoreSnapshot, + targetScoreTimeMsSnapshot: + targetScoreTimeMsSnapshot ?? this.targetScoreTimeMsSnapshot, + status: status ?? this.status, + startedAt: startedAt ?? this.startedAt, + completedAt: completedAt ?? this.completedAt, + actualTimeMs: actualTimeMs ?? this.actualTimeMs, + actualReps: actualReps ?? this.actualReps, + actualScore: actualScore ?? this.actualScore, + actualScoreTimeMs: actualScoreTimeMs ?? this.actualScoreTimeMs, + note: note ?? this.note, + 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 (workoutHistoryId.present) { + map['workout_history_id'] = Variable(workoutHistoryId.value); + } + if (programSnapshotId.present) { + map['program_snapshot_id'] = Variable(programSnapshotId.value); + } + if (exerciseSnapshotId.present) { + map['exercise_snapshot_id'] = Variable(exerciseSnapshotId.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 (passageIndex.present) { + map['passage_index'] = Variable(passageIndex.value); + } + if (stepIndex.present) { + map['step_index'] = Variable(stepIndex.value); + } + if (stepSnapshotId.present) { + map['step_snapshot_id'] = Variable(stepSnapshotId.value); + } + if (stepNameSnapshot.present) { + map['step_name_snapshot'] = Variable(stepNameSnapshot.value); + } + if (stepTypeSnapshot.present) { + map['step_type_snapshot'] = Variable(stepTypeSnapshot.value); + } + if (targetValueSnapshot.present) { + map['target_value_snapshot'] = Variable(targetValueSnapshot.value); + } + if (hasScoreSnapshot.present) { + map['has_score_snapshot'] = Variable(hasScoreSnapshot.value); + } + if (scoreInputModeSnapshot.present) { + map['score_input_mode_snapshot'] = Variable( + scoreInputModeSnapshot.value, + ); + } + if (scoreLabelSnapshot.present) { + map['score_label_snapshot'] = Variable(scoreLabelSnapshot.value); + } + if (scoreUnitSnapshot.present) { + map['score_unit_snapshot'] = Variable(scoreUnitSnapshot.value); + } + if (targetScoreSnapshot.present) { + map['target_score_snapshot'] = Variable( + targetScoreSnapshot.value, + ); + } + if (targetScoreTimeMsSnapshot.present) { + map['target_score_time_ms_snapshot'] = Variable( + targetScoreTimeMsSnapshot.value, + ); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (startedAt.present) { + map['started_at'] = Variable(startedAt.value); + } + if (completedAt.present) { + map['completed_at'] = Variable(completedAt.value); + } + if (actualTimeMs.present) { + map['actual_time_ms'] = Variable(actualTimeMs.value); + } + if (actualReps.present) { + map['actual_reps'] = Variable(actualReps.value); + } + if (actualScore.present) { + map['actual_score'] = Variable(actualScore.value); + } + if (actualScoreTimeMs.present) { + map['actual_score_time_ms'] = Variable(actualScoreTimeMs.value); + } + if (note.present) { + map['note'] = Variable(note.value); + } + if (rowid.present) { + map['rowid'] = Variable(rowid.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('WorkoutHistoryStepResultsCompanion(') + ..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('workoutHistoryId: $workoutHistoryId, ') + ..write('programSnapshotId: $programSnapshotId, ') + ..write('exerciseSnapshotId: $exerciseSnapshotId, ') + ..write('programIndex: $programIndex, ') + ..write('exerciseIndex: $exerciseIndex, ') + ..write('setIndex: $setIndex, ') + ..write('passageIndex: $passageIndex, ') + ..write('stepIndex: $stepIndex, ') + ..write('stepSnapshotId: $stepSnapshotId, ') + ..write('stepNameSnapshot: $stepNameSnapshot, ') + ..write('stepTypeSnapshot: $stepTypeSnapshot, ') + ..write('targetValueSnapshot: $targetValueSnapshot, ') + ..write('hasScoreSnapshot: $hasScoreSnapshot, ') + ..write('scoreInputModeSnapshot: $scoreInputModeSnapshot, ') + ..write('scoreLabelSnapshot: $scoreLabelSnapshot, ') + ..write('scoreUnitSnapshot: $scoreUnitSnapshot, ') + ..write('targetScoreSnapshot: $targetScoreSnapshot, ') + ..write('targetScoreTimeMsSnapshot: $targetScoreTimeMsSnapshot, ') + ..write('status: $status, ') + ..write('startedAt: $startedAt, ') + ..write('completedAt: $completedAt, ') + ..write('actualTimeMs: $actualTimeMs, ') + ..write('actualReps: $actualReps, ') + ..write('actualScore: $actualScore, ') + ..write('actualScoreTimeMs: $actualScoreTimeMs, ') + ..write('note: $note, ') + ..write('rowid: $rowid') + ..write(')')) + .toString(); + } +} + class $WorkoutTemplateProgramsTable extends WorkoutTemplatePrograms with TableInfo<$WorkoutTemplateProgramsTable, WorkoutTemplateProgram> { @override @@ -19962,6 +25521,12 @@ abstract class _$AppDatabase extends GeneratedDatabase { ); late final $ActiveWorkoutSessionsTable activeWorkoutSessions = $ActiveWorkoutSessionsTable(this); + late final $ActiveExerciseStepProgressStatesTable + activeExerciseStepProgressStates = $ActiveExerciseStepProgressStatesTable( + this, + ); + late final $ActiveExerciseStepResultsTable activeExerciseStepResults = + $ActiveExerciseStepResultsTable(this); late final $ActiveRestStatesTable activeRestStates = $ActiveRestStatesTable( this, ); @@ -19986,6 +25551,8 @@ abstract class _$AppDatabase extends GeneratedDatabase { ); late final $WorkoutHistorySetResultsTable workoutHistorySetResults = $WorkoutHistorySetResultsTable(this); + late final $WorkoutHistoryStepResultsTable workoutHistoryStepResults = + $WorkoutHistoryStepResultsTable(this); late final $WorkoutTemplateProgramsTable workoutTemplatePrograms = $WorkoutTemplateProgramsTable(this); late final $WorkoutTemplateExerciseOverridesTable @@ -19999,6 +25566,8 @@ abstract class _$AppDatabase extends GeneratedDatabase { List get allSchemaEntities => [ workoutTemplates, activeWorkoutSessions, + activeExerciseStepProgressStates, + activeExerciseStepResults, activeRestStates, activeScoreStopwatchStates, activeSetResults, @@ -20011,6 +25580,7 @@ abstract class _$AppDatabase extends GeneratedDatabase { programExercises, workoutHistories, workoutHistorySetResults, + workoutHistoryStepResults, workoutTemplatePrograms, workoutTemplateExerciseOverrides, ]; @@ -20811,6 +26381,70 @@ final class $$ActiveWorkoutSessionsTableReferences ); } + static MultiTypedResultKey< + $ActiveExerciseStepProgressStatesTable, + List + > + _activeExerciseStepProgressStatesRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.activeExerciseStepProgressStates, + aliasName: + 'active_workout_sessions__id__active_exercise_step_progress_states__active_workout_session_id', + ); + + $$ActiveExerciseStepProgressStatesTableProcessedTableManager + get activeExerciseStepProgressStatesRefs { + final manager = + $$ActiveExerciseStepProgressStatesTableTableManager( + $_db, + $_db.activeExerciseStepProgressStates, + ).filter( + (f) => f.activeWorkoutSessionId.id.sqlEquals( + $_itemColumn('id')!, + ), + ); + + final cache = $_typedResult.readTableOrNull( + _activeExerciseStepProgressStatesRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + + static MultiTypedResultKey< + $ActiveExerciseStepResultsTable, + List + > + _activeExerciseStepResultsRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.activeExerciseStepResults, + aliasName: + 'active_workout_sessions__id__active_exercise_step_results__active_workout_session_id', + ); + + $$ActiveExerciseStepResultsTableProcessedTableManager + get activeExerciseStepResultsRefs { + final manager = + $$ActiveExerciseStepResultsTableTableManager( + $_db, + $_db.activeExerciseStepResults, + ).filter( + (f) => f.activeWorkoutSessionId.id.sqlEquals( + $_itemColumn('id')!, + ), + ); + + final cache = $_typedResult.readTableOrNull( + _activeExerciseStepResultsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } + static MultiTypedResultKey<$ActiveRestStatesTable, List> _activeRestStatesRefsTable(_$AppDatabase db) => MultiTypedResultKey.fromTable( db.activeRestStates, @@ -21050,6 +26684,62 @@ class $$ActiveWorkoutSessionsTableFilterComposer return composer; } + Expression activeExerciseStepProgressStatesRefs( + Expression Function( + $$ActiveExerciseStepProgressStatesTableFilterComposer f, + ) + f, + ) { + final $$ActiveExerciseStepProgressStatesTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepProgressStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepProgressStatesTableFilterComposer( + $db: $db, + $table: $db.activeExerciseStepProgressStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression activeExerciseStepResultsRefs( + Expression Function($$ActiveExerciseStepResultsTableFilterComposer f) + f, + ) { + final $$ActiveExerciseStepResultsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepResults, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepResultsTableFilterComposer( + $db: $db, + $table: $db.activeExerciseStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeRestStatesRefs( Expression Function($$ActiveRestStatesTableFilterComposer f) f, ) { @@ -21412,6 +27102,62 @@ class $$ActiveWorkoutSessionsTableAnnotationComposer return composer; } + Expression activeExerciseStepProgressStatesRefs( + Expression Function( + $$ActiveExerciseStepProgressStatesTableAnnotationComposer a, + ) + f, + ) { + final $$ActiveExerciseStepProgressStatesTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepProgressStates, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepProgressStatesTableAnnotationComposer( + $db: $db, + $table: $db.activeExerciseStepProgressStates, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + + Expression activeExerciseStepResultsRefs( + Expression Function($$ActiveExerciseStepResultsTableAnnotationComposer a) + f, + ) { + final $$ActiveExerciseStepResultsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.activeExerciseStepResults, + getReferencedColumn: (t) => t.activeWorkoutSessionId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$ActiveExerciseStepResultsTableAnnotationComposer( + $db: $db, + $table: $db.activeExerciseStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } + Expression activeRestStatesRefs( Expression Function($$ActiveRestStatesTableAnnotationComposer a) f, ) { @@ -21532,6 +27278,8 @@ class $$ActiveWorkoutSessionsTableTableManager ActiveWorkoutSession, PrefetchHooks Function({ bool sourceWorkoutTemplateId, + bool activeExerciseStepProgressStatesRefs, + bool activeExerciseStepResultsRefs, bool activeRestStatesRefs, bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, @@ -21672,6 +27420,8 @@ class $$ActiveWorkoutSessionsTableTableManager prefetchHooksCallback: ({ sourceWorkoutTemplateId = false, + activeExerciseStepProgressStatesRefs = false, + activeExerciseStepResultsRefs = false, activeRestStatesRefs = false, activeScoreStopwatchStatesRefs = false, activeSetResultsRefs = false, @@ -21680,6 +27430,10 @@ class $$ActiveWorkoutSessionsTableTableManager return PrefetchHooks( db: db, explicitlyWatchedTables: [ + if (activeExerciseStepProgressStatesRefs) + db.activeExerciseStepProgressStates, + if (activeExerciseStepResultsRefs) + db.activeExerciseStepResults, if (activeRestStatesRefs) db.activeRestStates, if (activeScoreStopwatchStatesRefs) db.activeScoreStopwatchStates, @@ -21723,6 +27477,52 @@ class $$ActiveWorkoutSessionsTableTableManager }, getPrefetchedDataCallback: (items) async { return [ + if (activeExerciseStepProgressStatesRefs) + await $_getPrefetchedData< + ActiveWorkoutSession, + $ActiveWorkoutSessionsTable, + ActiveExerciseStepProgressState + >( + currentTable: table, + referencedTable: + $$ActiveWorkoutSessionsTableReferences + ._activeExerciseStepProgressStatesRefsTable( + db, + ), + managerFromTypedResult: (p0) => + $$ActiveWorkoutSessionsTableReferences( + db, + table, + p0, + ).activeExerciseStepProgressStatesRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.activeWorkoutSessionId == item.id, + ), + typedResults: items, + ), + if (activeExerciseStepResultsRefs) + await $_getPrefetchedData< + ActiveWorkoutSession, + $ActiveWorkoutSessionsTable, + ActiveExerciseStepResult + >( + currentTable: table, + referencedTable: + $$ActiveWorkoutSessionsTableReferences + ._activeExerciseStepResultsRefsTable(db), + managerFromTypedResult: (p0) => + $$ActiveWorkoutSessionsTableReferences( + db, + table, + p0, + ).activeExerciseStepResultsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.activeWorkoutSessionId == item.id, + ), + typedResults: items, + ), if (activeRestStatesRefs) await $_getPrefetchedData< ActiveWorkoutSession, @@ -21834,12 +27634,1730 @@ typedef $$ActiveWorkoutSessionsTableProcessedTableManager = ActiveWorkoutSession, PrefetchHooks Function({ bool sourceWorkoutTemplateId, + bool activeExerciseStepProgressStatesRefs, + bool activeExerciseStepResultsRefs, bool activeRestStatesRefs, bool activeScoreStopwatchStatesRefs, bool activeSetResultsRefs, bool workoutHistoriesRefs, }) >; +typedef $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder = + ActiveExerciseStepProgressStatesCompanion 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 int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + Value startedAt, + required int accumulatedMs, + required DateTime lastTransitionAt, + Value rowid, + }); +typedef $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder = + ActiveExerciseStepProgressStatesCompanion 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 currentPassageIndex, + Value currentStepIndex, + Value currentStepSnapshotId, + Value status, + Value startedAt, + Value accumulatedMs, + Value lastTransitionAt, + Value rowid, + }); + +final class $$ActiveExerciseStepProgressStatesTableReferences + extends + BaseReferences< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState + > { + $$ActiveExerciseStepProgressStatesTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ActiveWorkoutSessionsTable _activeWorkoutSessionIdTable( + _$AppDatabase db, + ) => db.activeWorkoutSessions.createAlias( + 'active_exercise_step_progress_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 $$ActiveExerciseStepProgressStatesTableFilterComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableFilterComposer({ + 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 currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + 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 lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + 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 $$ActiveExerciseStepProgressStatesTableOrderingComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableOrderingComposer({ + 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 currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + 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 lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + 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 $$ActiveExerciseStepProgressStatesTableAnnotationComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepProgressStatesTable> { + $$ActiveExerciseStepProgressStatesTableAnnotationComposer({ + 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 currentPassageIndex => $composableBuilder( + column: $table.currentPassageIndex, + builder: (column) => column, + ); + + GeneratedColumn get currentStepIndex => $composableBuilder( + column: $table.currentStepIndex, + builder: (column) => column, + ); + + GeneratedColumn get currentStepSnapshotId => $composableBuilder( + column: $table.currentStepSnapshotId, + 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 lastTransitionAt => $composableBuilder( + column: $table.lastTransitionAt, + 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 $$ActiveExerciseStepProgressStatesTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableFilterComposer, + $$ActiveExerciseStepProgressStatesTableOrderingComposer, + $$ActiveExerciseStepProgressStatesTableAnnotationComposer, + $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder, + $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder, + ( + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableReferences, + ), + ActiveExerciseStepProgressState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + > { + $$ActiveExerciseStepProgressStatesTableTableManager( + _$AppDatabase db, + $ActiveExerciseStepProgressStatesTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ActiveExerciseStepProgressStatesTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$ActiveExerciseStepProgressStatesTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$ActiveExerciseStepProgressStatesTableAnnotationComposer( + $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 currentPassageIndex = const Value.absent(), + Value currentStepIndex = const Value.absent(), + Value currentStepSnapshotId = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value accumulatedMs = const Value.absent(), + Value lastTransitionAt = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepProgressStatesCompanion( + 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, + currentPassageIndex: currentPassageIndex, + currentStepIndex: currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + lastTransitionAt: lastTransitionAt, + 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 int currentPassageIndex, + required int currentStepIndex, + required String currentStepSnapshotId, + required String status, + Value startedAt = const Value.absent(), + required int accumulatedMs, + required DateTime lastTransitionAt, + Value rowid = const Value.absent(), + }) => ActiveExerciseStepProgressStatesCompanion.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, + currentPassageIndex: currentPassageIndex, + currentStepIndex: currentStepIndex, + currentStepSnapshotId: currentStepSnapshotId, + status: status, + startedAt: startedAt, + accumulatedMs: accumulatedMs, + lastTransitionAt: lastTransitionAt, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$ActiveExerciseStepProgressStatesTableReferences( + 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: + $$ActiveExerciseStepProgressStatesTableReferences + ._activeWorkoutSessionIdTable(db), + referencedColumn: + $$ActiveExerciseStepProgressStatesTableReferences + ._activeWorkoutSessionIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$ActiveExerciseStepProgressStatesTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ActiveExerciseStepProgressStatesTable, + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableFilterComposer, + $$ActiveExerciseStepProgressStatesTableOrderingComposer, + $$ActiveExerciseStepProgressStatesTableAnnotationComposer, + $$ActiveExerciseStepProgressStatesTableCreateCompanionBuilder, + $$ActiveExerciseStepProgressStatesTableUpdateCompanionBuilder, + ( + ActiveExerciseStepProgressState, + $$ActiveExerciseStepProgressStatesTableReferences, + ), + ActiveExerciseStepProgressState, + PrefetchHooks Function({bool activeWorkoutSessionId}) + >; +typedef $$ActiveExerciseStepResultsTableCreateCompanionBuilder = + ActiveExerciseStepResultsCompanion 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 String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + required String status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); +typedef $$ActiveExerciseStepResultsTableUpdateCompanionBuilder = + ActiveExerciseStepResultsCompanion 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 programSnapshotId, + Value exerciseSnapshotId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value passageIndex, + Value stepIndex, + Value stepSnapshotId, + Value stepNameSnapshot, + Value stepTypeSnapshot, + Value targetValueSnapshot, + Value hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + Value status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); + +final class $$ActiveExerciseStepResultsTableReferences + extends + BaseReferences< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult + > { + $$ActiveExerciseStepResultsTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $ActiveWorkoutSessionsTable _activeWorkoutSessionIdTable( + _$AppDatabase db, + ) => db.activeWorkoutSessions.createAlias( + 'active_exercise_step_results__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 $$ActiveExerciseStepResultsTableFilterComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableFilterComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + 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), + ); + + ColumnFilters get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get note => $composableBuilder( + column: $table.note, + 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 $$ActiveExerciseStepResultsTableOrderingComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableOrderingComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + 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), + ); + + ColumnOrderings get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get note => $composableBuilder( + column: $table.note, + 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 $$ActiveExerciseStepResultsTableAnnotationComposer + extends Composer<_$AppDatabase, $ActiveExerciseStepResultsTable> { + $$ActiveExerciseStepResultsTableAnnotationComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => column, + ); + + GeneratedColumn get stepIndex => + $composableBuilder(column: $table.stepIndex, builder: (column) => column); + + GeneratedColumn get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => column, + ); + + GeneratedColumn get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => column, + ); + + GeneratedColumn get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => column, + ); + + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get note => + $composableBuilder(column: $table.note, 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 $$ActiveExerciseStepResultsTableTableManager + extends + RootTableManager< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableFilterComposer, + $$ActiveExerciseStepResultsTableOrderingComposer, + $$ActiveExerciseStepResultsTableAnnotationComposer, + $$ActiveExerciseStepResultsTableCreateCompanionBuilder, + $$ActiveExerciseStepResultsTableUpdateCompanionBuilder, + ( + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableReferences, + ), + ActiveExerciseStepResult, + PrefetchHooks Function({bool activeWorkoutSessionId}) + > { + $$ActiveExerciseStepResultsTableTableManager( + _$AppDatabase db, + $ActiveExerciseStepResultsTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$ActiveExerciseStepResultsTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$ActiveExerciseStepResultsTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$ActiveExerciseStepResultsTableAnnotationComposer( + $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 programSnapshotId = const Value.absent(), + Value exerciseSnapshotId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value passageIndex = const Value.absent(), + Value stepIndex = const Value.absent(), + Value stepSnapshotId = const Value.absent(), + Value stepNameSnapshot = const Value.absent(), + Value stepTypeSnapshot = const Value.absent(), + Value targetValueSnapshot = const Value.absent(), + Value hasScoreSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepResultsCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + activeWorkoutSessionId: activeWorkoutSessionId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + 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 String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => ActiveExerciseStepResultsCompanion.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, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$ActiveExerciseStepResultsTableReferences(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: + $$ActiveExerciseStepResultsTableReferences + ._activeWorkoutSessionIdTable(db), + referencedColumn: + $$ActiveExerciseStepResultsTableReferences + ._activeWorkoutSessionIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$ActiveExerciseStepResultsTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $ActiveExerciseStepResultsTable, + ActiveExerciseStepResult, + $$ActiveExerciseStepResultsTableFilterComposer, + $$ActiveExerciseStepResultsTableOrderingComposer, + $$ActiveExerciseStepResultsTableAnnotationComposer, + $$ActiveExerciseStepResultsTableCreateCompanionBuilder, + $$ActiveExerciseStepResultsTableUpdateCompanionBuilder, + (ActiveExerciseStepResult, $$ActiveExerciseStepResultsTableReferences), + ActiveExerciseStepResult, + PrefetchHooks Function({bool activeWorkoutSessionId}) + >; typedef $$ActiveRestStatesTableCreateCompanionBuilder = ActiveRestStatesCompanion Function({ required String id, @@ -29627,6 +37145,36 @@ final class $$WorkoutHistoriesTableReferences manager.$state.copyWith(prefetchedData: cache), ); } + + static MultiTypedResultKey< + $WorkoutHistoryStepResultsTable, + List + > + _workoutHistoryStepResultsRefsTable( + _$AppDatabase db, + ) => MultiTypedResultKey.fromTable( + db.workoutHistoryStepResults, + aliasName: + 'workout_history__id__workout_history_step_results__workout_history_id', + ); + + $$WorkoutHistoryStepResultsTableProcessedTableManager + get workoutHistoryStepResultsRefs { + final manager = + $$WorkoutHistoryStepResultsTableTableManager( + $_db, + $_db.workoutHistoryStepResults, + ).filter( + (f) => f.workoutHistoryId.id.sqlEquals($_itemColumn('id')!), + ); + + final cache = $_typedResult.readTableOrNull( + _workoutHistoryStepResultsRefsTable($_db), + ); + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: cache), + ); + } } class $$WorkoutHistoriesTableFilterComposer @@ -29796,6 +37344,33 @@ class $$WorkoutHistoriesTableFilterComposer ); return f(composer); } + + Expression workoutHistoryStepResultsRefs( + Expression Function($$WorkoutHistoryStepResultsTableFilterComposer f) + f, + ) { + final $$WorkoutHistoryStepResultsTableFilterComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.workoutHistoryStepResults, + getReferencedColumn: (t) => t.workoutHistoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoryStepResultsTableFilterComposer( + $db: $db, + $table: $db.workoutHistoryStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } } class $$WorkoutHistoriesTableOrderingComposer @@ -30093,6 +37668,33 @@ class $$WorkoutHistoriesTableAnnotationComposer ); return f(composer); } + + Expression workoutHistoryStepResultsRefs( + Expression Function($$WorkoutHistoryStepResultsTableAnnotationComposer a) + f, + ) { + final $$WorkoutHistoryStepResultsTableAnnotationComposer composer = + $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.workoutHistoryStepResults, + getReferencedColumn: (t) => t.workoutHistoryId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoryStepResultsTableAnnotationComposer( + $db: $db, + $table: $db.workoutHistoryStepResults, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return f(composer); + } } class $$WorkoutHistoriesTableTableManager @@ -30112,6 +37714,7 @@ class $$WorkoutHistoriesTableTableManager bool sourceWorkoutTemplateId, bool sourceActiveWorkoutSessionId, bool workoutHistorySetResultsRefs, + bool workoutHistoryStepResultsRefs, }) > { $$WorkoutHistoriesTableTableManager( @@ -30230,12 +37833,15 @@ class $$WorkoutHistoriesTableTableManager sourceWorkoutTemplateId = false, sourceActiveWorkoutSessionId = false, workoutHistorySetResultsRefs = false, + workoutHistoryStepResultsRefs = false, }) { return PrefetchHooks( db: db, explicitlyWatchedTables: [ if (workoutHistorySetResultsRefs) db.workoutHistorySetResults, + if (workoutHistoryStepResultsRefs) + db.workoutHistoryStepResults, ], addJoins: < @@ -30315,6 +37921,27 @@ class $$WorkoutHistoriesTableTableManager ), typedResults: items, ), + if (workoutHistoryStepResultsRefs) + await $_getPrefetchedData< + WorkoutHistory, + $WorkoutHistoriesTable, + WorkoutHistoryStepResult + >( + currentTable: table, + referencedTable: $$WorkoutHistoriesTableReferences + ._workoutHistoryStepResultsRefsTable(db), + managerFromTypedResult: (p0) => + $$WorkoutHistoriesTableReferences( + db, + table, + p0, + ).workoutHistoryStepResultsRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.workoutHistoryId == item.id, + ), + typedResults: items, + ), ]; }, ); @@ -30339,6 +37966,7 @@ typedef $$WorkoutHistoriesTableProcessedTableManager = bool sourceWorkoutTemplateId, bool sourceActiveWorkoutSessionId, bool workoutHistorySetResultsRefs, + bool workoutHistoryStepResultsRefs, }) >; typedef $$WorkoutHistorySetResultsTableCreateCompanionBuilder = @@ -31325,6 +38953,1010 @@ typedef $$WorkoutHistorySetResultsTableProcessedTableManager = WorkoutHistorySetResult, PrefetchHooks Function({bool workoutHistoryId}) >; +typedef $$WorkoutHistoryStepResultsTableCreateCompanionBuilder = + WorkoutHistoryStepResultsCompanion 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 workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + required String status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); +typedef $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder = + WorkoutHistoryStepResultsCompanion Function({ + Value id, + Value createdAt, + Value updatedAt, + Value deletedAt, + Value schemaVersion, + Value syncState, + Value localRevision, + Value originDeviceId, + Value futureOwnerProfileId, + Value lastSyncedAt, + Value remoteRevision, + Value workoutHistoryId, + Value programSnapshotId, + Value exerciseSnapshotId, + Value programIndex, + Value exerciseIndex, + Value setIndex, + Value passageIndex, + Value stepIndex, + Value stepSnapshotId, + Value stepNameSnapshot, + Value stepTypeSnapshot, + Value targetValueSnapshot, + Value hasScoreSnapshot, + Value scoreInputModeSnapshot, + Value scoreLabelSnapshot, + Value scoreUnitSnapshot, + Value targetScoreSnapshot, + Value targetScoreTimeMsSnapshot, + Value status, + Value startedAt, + Value completedAt, + Value actualTimeMs, + Value actualReps, + Value actualScore, + Value actualScoreTimeMs, + Value note, + Value rowid, + }); + +final class $$WorkoutHistoryStepResultsTableReferences + extends + BaseReferences< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult + > { + $$WorkoutHistoryStepResultsTableReferences( + super.$_db, + super.$_table, + super.$_typedResult, + ); + + static $WorkoutHistoriesTable _workoutHistoryIdTable(_$AppDatabase db) => + db.workoutHistories.createAlias( + 'workout_history_step_results__workout_history_id__workout_history__id', + ); + + $$WorkoutHistoriesTableProcessedTableManager get workoutHistoryId { + final $_column = $_itemColumn('workout_history_id')!; + + final manager = $$WorkoutHistoriesTableTableManager( + $_db, + $_db.workoutHistories, + ).filter((f) => f.id.sqlEquals($_column)); + final item = $_typedResult.readTableOrNull(_workoutHistoryIdTable($_db)); + if (item == null) return manager; + return ProcessedTableManager( + manager.$state.copyWith(prefetchedData: [item]), + ); + } +} + +class $$WorkoutHistoryStepResultsTableFilterComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableFilterComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + 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), + ); + + ColumnFilters get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnFilters(column), + ); + + ColumnFilters get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnFilters(column), + ); + + $$WorkoutHistoriesTableFilterComposer get workoutHistoryId { + final $$WorkoutHistoriesTableFilterComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableFilterComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableOrderingComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableOrderingComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepIndex => $composableBuilder( + column: $table.stepIndex, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + 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), + ); + + ColumnOrderings get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => ColumnOrderings(column), + ); + + ColumnOrderings get note => $composableBuilder( + column: $table.note, + builder: (column) => ColumnOrderings(column), + ); + + $$WorkoutHistoriesTableOrderingComposer get workoutHistoryId { + final $$WorkoutHistoriesTableOrderingComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableOrderingComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableAnnotationComposer + extends Composer<_$AppDatabase, $WorkoutHistoryStepResultsTable> { + $$WorkoutHistoryStepResultsTableAnnotationComposer({ + 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 programSnapshotId => $composableBuilder( + column: $table.programSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get exerciseSnapshotId => $composableBuilder( + column: $table.exerciseSnapshotId, + 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 passageIndex => $composableBuilder( + column: $table.passageIndex, + builder: (column) => column, + ); + + GeneratedColumn get stepIndex => + $composableBuilder(column: $table.stepIndex, builder: (column) => column); + + GeneratedColumn get stepSnapshotId => $composableBuilder( + column: $table.stepSnapshotId, + builder: (column) => column, + ); + + GeneratedColumn get stepNameSnapshot => $composableBuilder( + column: $table.stepNameSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get stepTypeSnapshot => $composableBuilder( + column: $table.stepTypeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetValueSnapshot => $composableBuilder( + column: $table.targetValueSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get hasScoreSnapshot => $composableBuilder( + column: $table.hasScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreInputModeSnapshot => $composableBuilder( + column: $table.scoreInputModeSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreLabelSnapshot => $composableBuilder( + column: $table.scoreLabelSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get scoreUnitSnapshot => $composableBuilder( + column: $table.scoreUnitSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreSnapshot => $composableBuilder( + column: $table.targetScoreSnapshot, + builder: (column) => column, + ); + + GeneratedColumn get targetScoreTimeMsSnapshot => $composableBuilder( + column: $table.targetScoreTimeMsSnapshot, + 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 completedAt => $composableBuilder( + column: $table.completedAt, + builder: (column) => column, + ); + + GeneratedColumn get actualTimeMs => $composableBuilder( + column: $table.actualTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get actualReps => $composableBuilder( + column: $table.actualReps, + builder: (column) => column, + ); + + GeneratedColumn get actualScore => $composableBuilder( + column: $table.actualScore, + builder: (column) => column, + ); + + GeneratedColumn get actualScoreTimeMs => $composableBuilder( + column: $table.actualScoreTimeMs, + builder: (column) => column, + ); + + GeneratedColumn get note => + $composableBuilder(column: $table.note, builder: (column) => column); + + $$WorkoutHistoriesTableAnnotationComposer get workoutHistoryId { + final $$WorkoutHistoriesTableAnnotationComposer composer = $composerBuilder( + composer: this, + getCurrentColumn: (t) => t.workoutHistoryId, + referencedTable: $db.workoutHistories, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $$WorkoutHistoriesTableAnnotationComposer( + $db: $db, + $table: $db.workoutHistories, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); + return composer; + } +} + +class $$WorkoutHistoryStepResultsTableTableManager + extends + RootTableManager< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableFilterComposer, + $$WorkoutHistoryStepResultsTableOrderingComposer, + $$WorkoutHistoryStepResultsTableAnnotationComposer, + $$WorkoutHistoryStepResultsTableCreateCompanionBuilder, + $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder, + ( + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableReferences, + ), + WorkoutHistoryStepResult, + PrefetchHooks Function({bool workoutHistoryId}) + > { + $$WorkoutHistoryStepResultsTableTableManager( + _$AppDatabase db, + $WorkoutHistoryStepResultsTable table, + ) : super( + TableManagerState( + db: db, + table: table, + createFilteringComposer: () => + $$WorkoutHistoryStepResultsTableFilterComposer( + $db: db, + $table: table, + ), + createOrderingComposer: () => + $$WorkoutHistoryStepResultsTableOrderingComposer( + $db: db, + $table: table, + ), + createComputedFieldComposer: () => + $$WorkoutHistoryStepResultsTableAnnotationComposer( + $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 workoutHistoryId = const Value.absent(), + Value programSnapshotId = const Value.absent(), + Value exerciseSnapshotId = const Value.absent(), + Value programIndex = const Value.absent(), + Value exerciseIndex = const Value.absent(), + Value setIndex = const Value.absent(), + Value passageIndex = const Value.absent(), + Value stepIndex = const Value.absent(), + Value stepSnapshotId = const Value.absent(), + Value stepNameSnapshot = const Value.absent(), + Value stepTypeSnapshot = const Value.absent(), + Value targetValueSnapshot = const Value.absent(), + Value hasScoreSnapshot = const Value.absent(), + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + Value status = const Value.absent(), + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => WorkoutHistoryStepResultsCompanion( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + workoutHistoryId: workoutHistoryId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + 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 workoutHistoryId, + required String programSnapshotId, + required String exerciseSnapshotId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + required int passageIndex, + required int stepIndex, + required String stepSnapshotId, + required String stepNameSnapshot, + required String stepTypeSnapshot, + required int targetValueSnapshot, + required bool hasScoreSnapshot, + Value scoreInputModeSnapshot = const Value.absent(), + Value scoreLabelSnapshot = const Value.absent(), + Value scoreUnitSnapshot = const Value.absent(), + Value targetScoreSnapshot = const Value.absent(), + Value targetScoreTimeMsSnapshot = const Value.absent(), + required String status, + Value startedAt = const Value.absent(), + Value completedAt = const Value.absent(), + Value actualTimeMs = const Value.absent(), + Value actualReps = const Value.absent(), + Value actualScore = const Value.absent(), + Value actualScoreTimeMs = const Value.absent(), + Value note = const Value.absent(), + Value rowid = const Value.absent(), + }) => WorkoutHistoryStepResultsCompanion.insert( + id: id, + createdAt: createdAt, + updatedAt: updatedAt, + deletedAt: deletedAt, + schemaVersion: schemaVersion, + syncState: syncState, + localRevision: localRevision, + originDeviceId: originDeviceId, + futureOwnerProfileId: futureOwnerProfileId, + lastSyncedAt: lastSyncedAt, + remoteRevision: remoteRevision, + workoutHistoryId: workoutHistoryId, + programSnapshotId: programSnapshotId, + exerciseSnapshotId: exerciseSnapshotId, + programIndex: programIndex, + exerciseIndex: exerciseIndex, + setIndex: setIndex, + passageIndex: passageIndex, + stepIndex: stepIndex, + stepSnapshotId: stepSnapshotId, + stepNameSnapshot: stepNameSnapshot, + stepTypeSnapshot: stepTypeSnapshot, + targetValueSnapshot: targetValueSnapshot, + hasScoreSnapshot: hasScoreSnapshot, + scoreInputModeSnapshot: scoreInputModeSnapshot, + scoreLabelSnapshot: scoreLabelSnapshot, + scoreUnitSnapshot: scoreUnitSnapshot, + targetScoreSnapshot: targetScoreSnapshot, + targetScoreTimeMsSnapshot: targetScoreTimeMsSnapshot, + status: status, + startedAt: startedAt, + completedAt: completedAt, + actualTimeMs: actualTimeMs, + actualReps: actualReps, + actualScore: actualScore, + actualScoreTimeMs: actualScoreTimeMs, + note: note, + rowid: rowid, + ), + withReferenceMapper: (p0) => p0 + .map( + (e) => ( + e.readTable(table), + $$WorkoutHistoryStepResultsTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({workoutHistoryId = false}) { + return PrefetchHooks( + db: db, + explicitlyWatchedTables: [], + addJoins: + < + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { + if (workoutHistoryId) { + state = + state.withJoin( + currentTable: table, + currentColumn: table.workoutHistoryId, + referencedTable: + $$WorkoutHistoryStepResultsTableReferences + ._workoutHistoryIdTable(db), + referencedColumn: + $$WorkoutHistoryStepResultsTableReferences + ._workoutHistoryIdTable(db) + .id, + ) + as T; + } + + return state; + }, + getPrefetchedDataCallback: (items) async { + return []; + }, + ); + }, + ), + ); +} + +typedef $$WorkoutHistoryStepResultsTableProcessedTableManager = + ProcessedTableManager< + _$AppDatabase, + $WorkoutHistoryStepResultsTable, + WorkoutHistoryStepResult, + $$WorkoutHistoryStepResultsTableFilterComposer, + $$WorkoutHistoryStepResultsTableOrderingComposer, + $$WorkoutHistoryStepResultsTableAnnotationComposer, + $$WorkoutHistoryStepResultsTableCreateCompanionBuilder, + $$WorkoutHistoryStepResultsTableUpdateCompanionBuilder, + (WorkoutHistoryStepResult, $$WorkoutHistoryStepResultsTableReferences), + WorkoutHistoryStepResult, + PrefetchHooks Function({bool workoutHistoryId}) + >; typedef $$WorkoutTemplateProgramsTableCreateCompanionBuilder = WorkoutTemplateProgramsCompanion Function({ required String id, @@ -32771,6 +41403,17 @@ class $AppDatabaseManager { $$WorkoutTemplatesTableTableManager(_db, _db.workoutTemplates); $$ActiveWorkoutSessionsTableTableManager get activeWorkoutSessions => $$ActiveWorkoutSessionsTableTableManager(_db, _db.activeWorkoutSessions); + $$ActiveExerciseStepProgressStatesTableTableManager + get activeExerciseStepProgressStates => + $$ActiveExerciseStepProgressStatesTableTableManager( + _db, + _db.activeExerciseStepProgressStates, + ); + $$ActiveExerciseStepResultsTableTableManager get activeExerciseStepResults => + $$ActiveExerciseStepResultsTableTableManager( + _db, + _db.activeExerciseStepResults, + ); $$ActiveRestStatesTableTableManager get activeRestStates => $$ActiveRestStatesTableTableManager(_db, _db.activeRestStates); $$ActiveScoreStopwatchStatesTableTableManager @@ -32802,6 +41445,11 @@ class $AppDatabaseManager { _db, _db.workoutHistorySetResults, ); + $$WorkoutHistoryStepResultsTableTableManager get workoutHistoryStepResults => + $$WorkoutHistoryStepResultsTableTableManager( + _db, + _db.workoutHistoryStepResults, + ); $$WorkoutTemplateProgramsTableTableManager get workoutTemplatePrograms => $$WorkoutTemplateProgramsTableTableManager( _db, diff --git a/lib/infrastructure/local/drift_repositories.dart b/lib/infrastructure/local/drift_repositories.dart index 0089e8f..d7a1632 100644 --- a/lib/infrastructure/local/drift_repositories.dart +++ b/lib/infrastructure/local/drift_repositories.dart @@ -532,6 +532,38 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { ); } + @override + Future saveExerciseStepProgressState( + domain.ActiveExerciseStepProgressState state, + ) async { + await _upsertWithChangeLog( + database: database, + tableName: 'active_exercise_step_progress_states', + entityType: 'ActiveExerciseStepProgressState', + metadata: state.metadata, + write: () => database + .into(database.activeExerciseStepProgressStates) + .insertOnConflictUpdate( + _activeExerciseStepProgressStateCompanion(state), + ), + ); + } + + @override + Future saveExerciseStepResult( + domain.ActiveExerciseStepResult result, + ) async { + await _upsertWithChangeLog( + database: database, + tableName: 'active_exercise_step_results', + entityType: 'ActiveExerciseStepResult', + metadata: result.metadata, + write: () => database + .into(database.activeExerciseStepResults) + .insertOnConflictUpdate(_activeExerciseStepResultCompanion(result)), + ); + } + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -588,6 +620,28 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { return row == null ? null : _activeScoreStopwatchStateFromRow(row); } + @override + Future + findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + final row = + await (database.select(database.activeExerciseStepProgressStates) + ..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 : _activeExerciseStepProgressStateFromRow(row); + } + @override Future> listSetResults(String sessionId) async { final rows = @@ -602,6 +656,47 @@ final class DriftActiveSessionRepository implements ActiveSessionRepository { return rows.map(_activeSetResultFromRow).toList(); } + @override + Future> + listExerciseStepProgressStates(String sessionId) async { + final rows = + await (database.select(database.activeExerciseStepProgressStates) + ..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(_activeExerciseStepProgressStateFromRow).toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + final rows = + await (database.select(database.activeExerciseStepResults) + ..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), + (table) => OrderingTerm.asc(table.passageIndex), + (table) => OrderingTerm.asc(table.stepIndex), + ])) + .get(); + return rows.map(_activeExerciseStepResultFromRow).toList(); + } + @override Future> listRestStates(String sessionId) async { final rows = @@ -661,9 +756,25 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { (table) => OrderingTerm.asc(table.setIndex), ])) .get(); + final stepResults = + await (database.select(database.workoutHistoryStepResults) + ..where( + (table) => + table.workoutHistoryId.equals(id) & + table.deletedAt.isNull(), + ) + ..orderBy([ + (table) => OrderingTerm.asc(table.programIndex), + (table) => OrderingTerm.asc(table.exerciseIndex), + (table) => OrderingTerm.asc(table.setIndex), + (table) => OrderingTerm.asc(table.passageIndex), + (table) => OrderingTerm.asc(table.stepIndex), + ])) + .get(); return _workoutHistoryFromRow( row, results.map(_workoutHistorySetResultFromRow).toList(), + stepResults.map(_workoutHistoryStepResultFromRow).toList(), ); } @@ -699,6 +810,9 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { for (final result in history.results) { await saveSetResult(result); } + for (final result in history.stepResults) { + await saveStepResult(result); + } }); } @@ -715,6 +829,19 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { ); } + @override + Future saveStepResult(domain.WorkoutHistoryStepResult result) async { + await _upsertWithChangeLog( + database: database, + tableName: 'workout_history_step_results', + entityType: 'WorkoutHistoryStepResult', + metadata: result.metadata, + write: () => database + .into(database.workoutHistoryStepResults) + .insertOnConflictUpdate(_workoutHistoryStepResultCompanion(result)), + ); + } + @override Future delete(String id, DateTime deletedAt) async { await database.transaction(() async { @@ -753,6 +880,18 @@ final class DriftWorkoutHistoryRepository implements WorkoutHistoryRepository { resultRows, deletedAt, ); + final stepResultRows = + await (database.select(database.workoutHistoryStepResults)..where( + (table) => + table.workoutHistoryId.equals(id) & + table.deletedAt.isNull(), + )) + .get(); + await _softDeleteWorkoutHistoryStepResultRows( + database, + stepResultRows, + deletedAt, + ); }); } } @@ -1149,6 +1288,35 @@ Future _softDeleteWorkoutHistorySetResultRows( } } +Future _softDeleteWorkoutHistoryStepResultRows( + db.AppDatabase database, + List rows, + DateTime deletedAt, +) async { + for (final row in rows) { + final revision = row.localRevision + 1; + await (database.update( + database.workoutHistoryStepResults, + )..where((table) => table.id.equals(row.id))).write( + db.WorkoutHistoryStepResultsCompanion( + deletedAt: Value(deletedAt.toUtc()), + updatedAt: Value(deletedAt.toUtc()), + localRevision: Value(revision), + syncState: const Value('deleted'), + ), + ); + await _writeChangeLog( + database: database, + entityType: 'WorkoutHistoryStepResult', + entityId: row.id, + operation: 'softDelete', + localRevision: revision, + originDeviceId: row.originDeviceId, + createdAt: deletedAt, + ); + } +} + DateTime _utc(DateTime value) => value.toUtc(); DateTime? _utcOrNull(DateTime? value) => value?.toUtc(); @@ -1732,6 +1900,142 @@ domain.ActiveScoreStopwatchState _activeScoreStopwatchStateFromRow( ); } +db.ActiveExerciseStepProgressStatesCompanion +_activeExerciseStepProgressStateCompanion( + domain.ActiveExerciseStepProgressState state, +) { + final values = _metadataValues(state.metadata); + return db.ActiveExerciseStepProgressStatesCompanion( + 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), + currentPassageIndex: Value(state.currentPassageIndex), + currentStepIndex: Value(state.currentStepIndex), + currentStepSnapshotId: Value(state.currentStepSnapshotId), + status: Value(_exerciseStepProgressStatusToDb(state.status)), + startedAt: Value(_utcOrNull(state.startedAt)), + accumulatedMs: Value(state.accumulatedMs), + lastTransitionAt: Value(state.lastTransitionAt.toUtc()), + ); +} + +domain.ActiveExerciseStepProgressState +_activeExerciseStepProgressStateFromRow( + db.ActiveExerciseStepProgressState row, +) { + return domain.ActiveExerciseStepProgressState( + metadata: _metadataFromRow(row), + activeWorkoutSessionId: row.activeWorkoutSessionId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + currentPassageIndex: row.currentPassageIndex, + currentStepIndex: row.currentStepIndex, + currentStepSnapshotId: row.currentStepSnapshotId, + status: _exerciseStepProgressStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + accumulatedMs: row.accumulatedMs, + lastTransitionAt: _utc(row.lastTransitionAt), + ); +} + +db.ActiveExerciseStepResultsCompanion _activeExerciseStepResultCompanion( + domain.ActiveExerciseStepResult result, +) { + final values = _metadataValues(result.metadata); + return db.ActiveExerciseStepResultsCompanion( + 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(result.activeWorkoutSessionId), + programSnapshotId: Value(result.programSnapshotId), + exerciseSnapshotId: Value(result.exerciseSnapshotId), + programIndex: Value(result.programIndex), + exerciseIndex: Value(result.exerciseIndex), + setIndex: Value(result.setIndex), + passageIndex: Value(result.passageIndex), + stepIndex: Value(result.stepIndex), + stepSnapshotId: Value(result.stepSnapshotId), + stepNameSnapshot: Value(result.stepNameSnapshot), + stepTypeSnapshot: Value(_exerciseStepTypeToDb(result.stepTypeSnapshot)), + targetValueSnapshot: Value(result.targetValueSnapshot), + hasScoreSnapshot: Value(result.hasScoreSnapshot), + scoreInputModeSnapshot: Value( + result.scoreInputModeSnapshot == null + ? null + : _scoreInputModeToDb(result.scoreInputModeSnapshot!), + ), + scoreLabelSnapshot: Value(result.scoreLabelSnapshot), + scoreUnitSnapshot: Value(result.scoreUnitSnapshot), + targetScoreSnapshot: Value(result.targetScoreSnapshot), + targetScoreTimeMsSnapshot: Value(result.targetScoreTimeMsSnapshot), + status: Value(_setResultStatusToDb(result.status)), + startedAt: Value(_utcOrNull(result.startedAt)), + completedAt: Value(_utcOrNull(result.completedAt)), + actualTimeMs: Value(result.actualTimeMs), + actualReps: Value(result.actualReps), + actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), + note: Value(result.note), + ); +} + +domain.ActiveExerciseStepResult _activeExerciseStepResultFromRow( + db.ActiveExerciseStepResult row, +) { + return domain.ActiveExerciseStepResult( + metadata: _metadataFromRow(row), + activeWorkoutSessionId: row.activeWorkoutSessionId, + programSnapshotId: row.programSnapshotId, + exerciseSnapshotId: row.exerciseSnapshotId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + passageIndex: row.passageIndex, + stepIndex: row.stepIndex, + stepSnapshotId: row.stepSnapshotId, + stepNameSnapshot: row.stepNameSnapshot, + stepTypeSnapshot: _exerciseStepTypeFromDb(row.stepTypeSnapshot), + targetValueSnapshot: row.targetValueSnapshot, + hasScoreSnapshot: row.hasScoreSnapshot, + scoreInputModeSnapshot: row.scoreInputModeSnapshot == null + ? null + : _scoreInputModeFromDb(row.scoreInputModeSnapshot!), + scoreLabelSnapshot: row.scoreLabelSnapshot, + scoreUnitSnapshot: row.scoreUnitSnapshot, + targetScoreSnapshot: row.targetScoreSnapshot, + targetScoreTimeMsSnapshot: row.targetScoreTimeMsSnapshot, + status: _setResultStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + completedAt: _utcOrNull(row.completedAt), + actualTimeMs: row.actualTimeMs, + actualReps: row.actualReps, + actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, + note: row.note, + ); +} + db.WorkoutHistoriesCompanion _workoutHistoryCompanion( domain.WorkoutHistory history, ) { @@ -1805,9 +2109,59 @@ db.WorkoutHistorySetResultsCompanion _workoutHistorySetResultCompanion( ); } +db.WorkoutHistoryStepResultsCompanion _workoutHistoryStepResultCompanion( + domain.WorkoutHistoryStepResult result, +) { + final values = _metadataValues(result.metadata); + return db.WorkoutHistoryStepResultsCompanion( + 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, + workoutHistoryId: Value(result.workoutHistoryId), + programSnapshotId: Value(result.programSnapshotId), + exerciseSnapshotId: Value(result.exerciseSnapshotId), + programIndex: Value(result.programIndex), + exerciseIndex: Value(result.exerciseIndex), + setIndex: Value(result.setIndex), + passageIndex: Value(result.passageIndex), + stepIndex: Value(result.stepIndex), + stepSnapshotId: Value(result.stepSnapshotId), + stepNameSnapshot: Value(result.stepNameSnapshot), + stepTypeSnapshot: Value(_exerciseStepTypeToDb(result.stepTypeSnapshot)), + targetValueSnapshot: Value(result.targetValueSnapshot), + hasScoreSnapshot: Value(result.hasScoreSnapshot), + scoreInputModeSnapshot: Value( + result.scoreInputModeSnapshot == null + ? null + : _scoreInputModeToDb(result.scoreInputModeSnapshot!), + ), + scoreLabelSnapshot: Value(result.scoreLabelSnapshot), + scoreUnitSnapshot: Value(result.scoreUnitSnapshot), + targetScoreSnapshot: Value(result.targetScoreSnapshot), + targetScoreTimeMsSnapshot: Value(result.targetScoreTimeMsSnapshot), + status: Value(_setResultStatusToDb(result.status)), + startedAt: Value(_utcOrNull(result.startedAt)), + completedAt: Value(_utcOrNull(result.completedAt)), + actualTimeMs: Value(result.actualTimeMs), + actualReps: Value(result.actualReps), + actualScore: Value(result.actualScore), + actualScoreTimeMs: Value(result.actualScoreTimeMs), + note: Value(result.note), + ); +} + domain.WorkoutHistory _workoutHistoryFromRow( db.WorkoutHistory row, List results, + List stepResults, ) { return domain.WorkoutHistory( metadata: _metadataFromRow(row), @@ -1820,6 +2174,7 @@ domain.WorkoutHistory _workoutHistoryFromRow( completed: row.completed, historySnapshotJson: row.historySnapshotJson, results: results, + stepResults: stepResults, ); } @@ -1856,6 +2211,42 @@ domain.WorkoutHistorySetResult _workoutHistorySetResultFromRow( ); } +domain.WorkoutHistoryStepResult _workoutHistoryStepResultFromRow( + db.WorkoutHistoryStepResult row, +) { + return domain.WorkoutHistoryStepResult( + metadata: _metadataFromRow(row), + workoutHistoryId: row.workoutHistoryId, + programSnapshotId: row.programSnapshotId, + exerciseSnapshotId: row.exerciseSnapshotId, + programIndex: row.programIndex, + exerciseIndex: row.exerciseIndex, + setIndex: row.setIndex, + passageIndex: row.passageIndex, + stepIndex: row.stepIndex, + stepSnapshotId: row.stepSnapshotId, + stepNameSnapshot: row.stepNameSnapshot, + stepTypeSnapshot: _exerciseStepTypeFromDb(row.stepTypeSnapshot), + targetValueSnapshot: row.targetValueSnapshot, + hasScoreSnapshot: row.hasScoreSnapshot, + scoreInputModeSnapshot: row.scoreInputModeSnapshot == null + ? null + : _scoreInputModeFromDb(row.scoreInputModeSnapshot!), + scoreLabelSnapshot: row.scoreLabelSnapshot, + scoreUnitSnapshot: row.scoreUnitSnapshot, + targetScoreSnapshot: row.targetScoreSnapshot, + targetScoreTimeMsSnapshot: row.targetScoreTimeMsSnapshot, + status: _setResultStatusFromDb(row.status), + startedAt: _utcOrNull(row.startedAt), + completedAt: _utcOrNull(row.completedAt), + actualTimeMs: row.actualTimeMs, + actualReps: row.actualReps, + actualScore: row.actualScore, + actualScoreTimeMs: row.actualScoreTimeMs, + note: row.note, + ); +} + String _syncStateToDb(domain.SyncState state) => switch (state) { domain.SyncState.localOnly => 'localOnly', domain.SyncState.dirty => 'dirty', @@ -1939,6 +2330,33 @@ domain.ActiveScoreStopwatchStatus _scoreStopwatchStatusFromDb(String value) => ), }; +String _exerciseStepProgressStatusToDb( + domain.ActiveExerciseStepProgressStatus status, +) => switch (status) { + domain.ActiveExerciseStepProgressStatus.notStarted => 'notStarted', + domain.ActiveExerciseStepProgressStatus.waitingManual => 'waitingManual', + domain.ActiveExerciseStepProgressStatus.runningTimer => 'runningTimer', + domain.ActiveExerciseStepProgressStatus.pausedTimer => 'pausedTimer', + domain.ActiveExerciseStepProgressStatus.stoppedTimer => 'stoppedTimer', + domain.ActiveExerciseStepProgressStatus.sequenceComplete => + 'sequenceComplete', +}; + +domain.ActiveExerciseStepProgressStatus _exerciseStepProgressStatusFromDb( + String value, +) => switch (value) { + 'notStarted' => domain.ActiveExerciseStepProgressStatus.notStarted, + 'waitingManual' => domain.ActiveExerciseStepProgressStatus.waitingManual, + 'runningTimer' => domain.ActiveExerciseStepProgressStatus.runningTimer, + 'pausedTimer' => domain.ActiveExerciseStepProgressStatus.pausedTimer, + 'stoppedTimer' => domain.ActiveExerciseStepProgressStatus.stoppedTimer, + 'sequenceComplete' => + domain.ActiveExerciseStepProgressStatus.sequenceComplete, + _ => throw domain.DomainException( + 'Unknown active exercise step progress status: $value', + ), +}; + String? _encodeImageMediaIdsSnapshot(List imageMediaIds) { return imageMediaIds.isEmpty ? null : jsonEncode(imageMediaIds); } diff --git a/lib/infrastructure/local/tables.dart b/lib/infrastructure/local/tables.dart index eeee536..6ab7e85 100644 --- a/lib/infrastructure/local/tables.dart +++ b/lib/infrastructure/local/tables.dart @@ -419,6 +419,108 @@ class ActiveRestStates extends SyncableTable { ]; } +class ActiveExerciseStepProgressStates extends SyncableTable { + @override + String get tableName => 'active_exercise_step_progress_states'; + + TextColumn get activeWorkoutSessionId => + text().references(ActiveWorkoutSessions, #id)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get currentPassageIndex => integer()(); + IntColumn get currentStepIndex => integer()(); + TextColumn get currentStepSnapshotId => text().withLength(min: 1)(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + IntColumn get accumulatedMs => integer()(); + DateTimeColumn get lastTransitionAt => dateTime()(); + + @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 (current_passage_index >= 0)', + 'CHECK (current_step_index >= 0)', + "CHECK (status IN ('notStarted', 'waitingManual', 'runningTimer', " + "'pausedTimer', 'stoppedTimer', 'sequenceComplete'))", + 'CHECK (status != \'runningTimer\' OR started_at IS NOT NULL)', + 'CHECK (accumulated_ms >= 0)', + ]; +} + +class ActiveExerciseStepResults extends SyncableTable { + @override + String get tableName => 'active_exercise_step_results'; + + TextColumn get activeWorkoutSessionId => + text().references(ActiveWorkoutSessions, #id)(); + TextColumn get programSnapshotId => text().withLength(min: 1)(); + TextColumn get exerciseSnapshotId => text().withLength(min: 1)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get passageIndex => integer()(); + IntColumn get stepIndex => integer()(); + TextColumn get stepSnapshotId => text().withLength(min: 1)(); + TextColumn get stepNameSnapshot => text().withLength(min: 1)(); + TextColumn get stepTypeSnapshot => text()(); + IntColumn get targetValueSnapshot => integer()(); + BoolColumn get hasScoreSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => text().nullable()(); + TextColumn get scoreLabelSnapshot => text().nullable()(); + TextColumn get scoreUnitSnapshot => text().nullable()(); + RealColumn get targetScoreSnapshot => real().nullable()(); + IntColumn get targetScoreTimeMsSnapshot => integer().nullable()(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + DateTimeColumn get completedAt => dateTime().nullable()(); + IntColumn get actualTimeMs => integer().nullable()(); + IntColumn get actualReps => integer().nullable()(); + RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); + TextColumn get note => text().nullable()(); + + @override + List get customConstraints => [ + 'UNIQUE (active_workout_session_id, program_index, exercise_index, ' + 'set_index, passage_index, step_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + 'CHECK (passage_index >= 0)', + 'CHECK (step_index >= 0)', + "CHECK (step_type_snapshot IN ('time', 'reps'))", + 'CHECK (target_value_snapshot > 0)', + "CHECK (score_input_mode_snapshot IS NULL OR " + "score_input_mode_snapshot IN ('manual', 'stopwatch'))", + "CHECK (status IN ('completed', 'skipped'))", + '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 (actual_time_ms IS NULL OR step_type_snapshot = \'time\')', + 'CHECK (actual_reps IS NULL OR step_type_snapshot = \'reps\')', + 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + 'CHECK (target_score_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (actual_score_time_ms IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', + 'CHECK (target_score_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot IS NULL)', + ]; +} + class WorkoutHistories extends SyncableTable { @override String get tableName => 'workout_history'; @@ -511,6 +613,74 @@ class WorkoutHistorySetResults extends SyncableTable { ]; } +class WorkoutHistoryStepResults extends SyncableTable { + @override + String get tableName => 'workout_history_step_results'; + + TextColumn get workoutHistoryId => text().references(WorkoutHistories, #id)(); + TextColumn get programSnapshotId => text().withLength(min: 1)(); + TextColumn get exerciseSnapshotId => text().withLength(min: 1)(); + IntColumn get programIndex => integer()(); + IntColumn get exerciseIndex => integer()(); + IntColumn get setIndex => integer()(); + IntColumn get passageIndex => integer()(); + IntColumn get stepIndex => integer()(); + TextColumn get stepSnapshotId => text().withLength(min: 1)(); + TextColumn get stepNameSnapshot => text().withLength(min: 1)(); + TextColumn get stepTypeSnapshot => text()(); + IntColumn get targetValueSnapshot => integer()(); + BoolColumn get hasScoreSnapshot => boolean()(); + TextColumn get scoreInputModeSnapshot => text().nullable()(); + TextColumn get scoreLabelSnapshot => text().nullable()(); + TextColumn get scoreUnitSnapshot => text().nullable()(); + RealColumn get targetScoreSnapshot => real().nullable()(); + IntColumn get targetScoreTimeMsSnapshot => integer().nullable()(); + TextColumn get status => text()(); + DateTimeColumn get startedAt => dateTime().nullable()(); + DateTimeColumn get completedAt => dateTime().nullable()(); + IntColumn get actualTimeMs => integer().nullable()(); + IntColumn get actualReps => integer().nullable()(); + RealColumn get actualScore => real().nullable()(); + IntColumn get actualScoreTimeMs => integer().nullable()(); + TextColumn get note => text().nullable()(); + + @override + List get customConstraints => [ + 'UNIQUE (workout_history_id, program_index, exercise_index, set_index, ' + 'passage_index, step_index)', + 'CHECK (program_index >= 0)', + 'CHECK (exercise_index >= 0)', + 'CHECK (set_index >= 0)', + 'CHECK (passage_index >= 0)', + 'CHECK (step_index >= 0)', + "CHECK (step_type_snapshot IN ('time', 'reps'))", + 'CHECK (target_value_snapshot > 0)', + "CHECK (score_input_mode_snapshot IS NULL OR " + "score_input_mode_snapshot IN ('manual', 'stopwatch'))", + "CHECK (status IN ('completed', 'skipped'))", + '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 (actual_time_ms IS NULL OR step_type_snapshot = \'time\')', + 'CHECK (actual_reps IS NULL OR step_type_snapshot = \'reps\')', + 'CHECK (status != \'skipped\' OR (actual_time_ms IS NULL ' + 'AND actual_reps IS NULL AND actual_score IS NULL ' + 'AND actual_score_time_ms IS NULL))', + 'CHECK (target_score_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (target_score_time_ms_snapshot IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'manual'))", + 'CHECK (actual_score_time_ms IS NULL OR ' + "(has_score_snapshot AND score_input_mode_snapshot = 'stopwatch'))", + 'CHECK (actual_score IS NULL OR actual_score_time_ms IS NULL)', + 'CHECK (target_score_snapshot IS NULL OR ' + 'target_score_time_ms_snapshot IS NULL)', + ]; +} + class ChangeLogEntries extends Table { @override String get tableName => 'change_log'; diff --git a/lib/presentation/exercise_library_screen.dart b/lib/presentation/exercise_library_screen.dart index 1c3c972..dd51049 100644 --- a/lib/presentation/exercise_library_screen.dart +++ b/lib/presentation/exercise_library_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; @@ -400,7 +402,11 @@ final class _ExerciseFormScreenState extends State { var _saving = false; var _importingImage = false; var _importingVideo = false; + var _stepsEnabled = false; + var _nextStepDraftId = 0; + final _stepDrafts = <_ExerciseStepDraft>[]; String? _measureError; + String? _stepError; String? _warning; bool get _isEditing => widget.exercise != null; @@ -434,6 +440,10 @@ final class _ExerciseFormScreenState extends State { _hasReps = exercise?.hasRepsMeasure ?? false; _hasScore = exercise?.hasScoreMeasure ?? false; _scoreInputMode = exercise?.scoreInputMode ?? ScoreInputMode.manual; + _stepsEnabled = exercise?.steps.isNotEmpty ?? false; + for (final step in exercise?.steps ?? const []) { + _stepDrafts.add(_draftFromStep(step)); + } } @override @@ -446,6 +456,9 @@ final class _ExerciseFormScreenState extends State { _defaultRepsController.dispose(); _defaultScoreController.dispose(); _defaultScoreTimeController.dispose(); + for (final draft in _stepDrafts) { + draft.dispose(); + } super.dispose(); } @@ -666,6 +679,8 @@ final class _ExerciseFormScreenState extends State { ), ], ], + const SizedBox(height: 24), + _buildExerciseStepsSection(context), if (_warning != null) ...[ const SizedBox(height: 16), MaterialBanner( @@ -696,6 +711,305 @@ final class _ExerciseFormScreenState extends State { ); } + Widget _buildExerciseStepsSection(BuildContext context) { + final reachedLimit = _stepDrafts.length >= 8; + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Text( + 'Séquence d’étapes', + style: Theme.of(context).textTheme.titleMedium, + ), + const SizedBox(height: 8), + SwitchListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Rythmer cet exercice avec des étapes'), + subtitle: Text( + _stepsEnabled + ? 'Chaque passage suit ces étapes dans l’ordre. Si la série ' + 'suit des répétitions, une répétition correspond à un ' + 'passage complet.' + : 'Ajoute des étapes si l’exercice doit suivre un ordre précis ' + 'pendant chaque série.', + ), + value: _stepsEnabled, + onChanged: (value) { + setState(() { + _stepsEnabled = value; + _stepError = null; + }); + }, + ), + if (_stepsEnabled) ...[ + const SizedBox(height: 8), + ReorderableListView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + buildDefaultDragHandles: false, + itemCount: _stepDrafts.length, + onReorder: _reorderStep, + itemBuilder: (context, index) { + return _buildStepCard(context, index, _stepDrafts[index]); + }, + ), + if (_stepError != null) ...[ + const SizedBox(height: 8), + Text( + _stepError!, + style: TextStyle(color: Theme.of(context).colorScheme.error), + ), + ], + const SizedBox(height: 8), + if (reachedLimit) + const ListTile( + contentPadding: EdgeInsets.zero, + leading: Icon(Icons.info_outline), + title: Text('Limite atteinte'), + subtitle: Text('Un exercice peut contenir jusqu’à 8 étapes.'), + ) + else + OutlinedButton.icon( + onPressed: _addStep, + icon: const Icon(Icons.add), + label: const Text('Ajouter une étape'), + ), + ], + ], + ); + } + + Widget _buildStepCard( + BuildContext context, + int index, + _ExerciseStepDraft draft, + ) { + final targetLabel = draft.type == ExerciseStepType.time + ? 'Durée par défaut (s)' + : 'Répétitions par défaut'; + final targetMessage = draft.type == ExerciseStepType.time + ? 'Saisis une durée supérieure à 0.' + : 'Saisis un nombre de répétitions supérieur à 0.'; + final summaryUnit = draft.type == ExerciseStepType.time ? 's' : ''; + return CourtBlazerAccentPanel( + key: ValueKey(draft.id), + margin: const EdgeInsets.only(bottom: 12), + padding: const EdgeInsets.all(12), + child: Material( + type: MaterialType.transparency, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + ReorderableDragStartListener( + index: index, + child: const Padding( + padding: EdgeInsets.only(right: 8), + child: Icon(Icons.drag_handle), + ), + ), + Expanded( + child: Text( + '${index + 1}. ${draft.displayName}', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + PopupMenuButton<_StepAction>( + tooltip: 'Actions de l’étape ${index + 1}', + onSelected: (action) => _handleStepAction(index, action), + itemBuilder: (context) => [ + PopupMenuItem( + value: _StepAction.moveUp, + enabled: index > 0, + child: const Text('Monter'), + ), + PopupMenuItem( + value: _StepAction.moveDown, + enabled: index < _stepDrafts.length - 1, + child: const Text('Descendre'), + ), + const PopupMenuItem( + value: _StepAction.duplicate, + child: Text('Dupliquer'), + ), + const PopupMenuItem( + value: _StepAction.delete, + child: Text('Supprimer'), + ), + ], + ), + ], + ), + const SizedBox(height: 8), + Text( + draft.type == ExerciseStepType.time + ? 'Temps · ${draft.targetController.text.trim()} $summaryUnit' + : 'Répétitions · ${draft.targetController.text.trim()}', + style: Theme.of(context).textTheme.bodySmall, + ), + const SizedBox(height: 12), + TextFormField( + controller: draft.nameController, + decoration: const InputDecoration(labelText: 'Nom de l’étape'), + validator: (value) { + if (!_stepsEnabled) return null; + return value == null || value.trim().isEmpty + ? 'Le nom de l’étape est obligatoire.' + : null; + }, + onChanged: (_) => setState(() {}), + ), + const SizedBox(height: 8), + Text('Type d’étape', style: Theme.of(context).textTheme.titleSmall), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Temps'), + value: ExerciseStepType.time, + groupValue: draft.type, + onChanged: (value) { + if (value == null) return; + setState(() => draft.type = value); + }, + ), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Répétitions'), + value: ExerciseStepType.reps, + groupValue: draft.type, + onChanged: (value) { + if (value == null) return; + setState(() => draft.type = value); + }, + ), + TextFormField( + controller: draft.targetController, + decoration: InputDecoration(labelText: targetLabel), + keyboardType: TextInputType.number, + validator: (value) => + _stepsEnabled ? _positiveIntValidator(value, targetMessage) : null, + onChanged: (_) => setState(() {}), + ), + const SizedBox(height: 8), + SwitchListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Score d’étape'), + subtitle: const Text('Ajouter un score pour cette étape'), + value: draft.hasScore, + onChanged: (value) => setState(() => draft.hasScore = value), + ), + if (draft.hasScore) ...[ + Text('Mode de score', style: Theme.of(context).textTheme.titleSmall), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Saisie libre'), + value: ScoreInputMode.manual, + groupValue: draft.scoreInputMode, + onChanged: (value) { + if (value == null) return; + setState(() => draft.scoreInputMode = value); + }, + ), + RadioListTile( + contentPadding: EdgeInsets.zero, + title: const Text('Chrono intégré'), + value: ScoreInputMode.stopwatch, + groupValue: draft.scoreInputMode, + onChanged: (value) { + if (value == null) return; + setState(() => draft.scoreInputMode = value); + }, + ), + if (draft.scoreInputMode == ScoreInputMode.manual) ...[ + TextFormField( + controller: draft.scoreLabelController, + decoration: const InputDecoration(labelText: 'Score à saisir'), + validator: (value) { + if (!_stepsEnabled || !draft.hasScore) return null; + if (draft.scoreInputMode != ScoreInputMode.manual) { + return null; + } + return value == null || value.trim().isEmpty + ? 'Le libellé du score est obligatoire.' + : null; + }, + ), + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreUnitController, + decoration: const InputDecoration(labelText: 'Unité'), + validator: (value) { + if (!_stepsEnabled || !draft.hasScore) return null; + if (draft.scoreInputMode != ScoreInputMode.manual) { + return null; + } + return value == null || value.trim().isEmpty + ? 'L’unité du score est obligatoire.' + : null; + }, + ), + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreTargetController, + decoration: const InputDecoration( + labelText: 'Score par défaut', + ), + keyboardType: const TextInputType.numberWithOptions( + decimal: true, + ), + validator: (value) { + if (!_stepsEnabled || + !draft.hasScore || + draft.scoreInputMode != ScoreInputMode.manual || + value == null || + value.trim().isEmpty) { + return null; + } + return _nonNegativeDoubleValidator( + value, + 'Saisis un score supérieur ou égal à 0.', + ); + }, + ), + ] else ...[ + if (draft.type == ExerciseStepType.time) ...[ + const SizedBox(height: 8), + const Text( + 'Cette étape utilise déjà un compte à rebours. Le score ' + 'chrono ajoute un second temps mesuré ; garde-le seulement ' + 'si tu veux enregistrer une performance distincte.', + ), + ], + const SizedBox(height: 8), + TextFormField( + controller: draft.scoreTargetController, + decoration: const InputDecoration( + labelText: 'Objectif de chrono par défaut (optionnel)', + ), + keyboardType: const TextInputType.numberWithOptions( + decimal: true, + ), + validator: (value) { + if (!_stepsEnabled || + !draft.hasScore || + draft.scoreInputMode != ScoreInputMode.stopwatch || + value == null || + value.trim().isEmpty) { + return null; + } + return _positiveDoubleValidator( + value, + 'Saisis un objectif supérieur à 0.', + ); + }, + ), + ], + ], + ], + ), + ), + ); + } + void _setMeasure(VoidCallback update) { setState(() { update(); @@ -704,6 +1018,141 @@ final class _ExerciseFormScreenState extends State { }); } + void _addStep() { + if (_stepDrafts.length >= 8) { + setState(() { + _stepError = 'Un exercice peut contenir jusqu’à 8 étapes.'; + }); + return; + } + setState(() { + _stepError = null; + _stepDrafts.add( + _ExerciseStepDraft( + id: 'step-draft-${_nextStepDraftId++}', + name: 'Nouvelle étape', + defaultTargetValue: '10', + ), + ); + }); + } + + void _reorderStep(int oldIndex, int newIndex) { + setState(() { + if (newIndex > oldIndex) { + newIndex -= 1; + } + final draft = _stepDrafts.removeAt(oldIndex); + _stepDrafts.insert(newIndex, draft); + }); + } + + void _handleStepAction(int index, _StepAction action) { + switch (action) { + case _StepAction.moveUp: + if (index <= 0) return; + setState(() { + final draft = _stepDrafts.removeAt(index); + _stepDrafts.insert(index - 1, draft); + }); + break; + case _StepAction.moveDown: + if (index >= _stepDrafts.length - 1) return; + setState(() { + final draft = _stepDrafts.removeAt(index); + _stepDrafts.insert(index + 1, draft); + }); + break; + case _StepAction.duplicate: + _duplicateStep(index); + break; + case _StepAction.delete: + unawaited(_confirmRemoveStep(index)); + break; + } + } + + void _duplicateStep(int index) { + if (_stepDrafts.length >= 8) { + setState(() { + _stepError = 'Un exercice peut contenir jusqu’à 8 étapes.'; + }); + return; + } + setState(() { + _stepError = null; + _stepDrafts.insert(index + 1, _stepDrafts[index].duplicate( + 'step-draft-${_nextStepDraftId++}', + )); + }); + } + + Future _confirmRemoveStep(int index) async { + final draft = _stepDrafts[index]; + var confirmed = true; + if (draft.hasFilledContent) { + confirmed = + await showDialog( + context: context, + builder: (context) => AlertDialog( + title: const Text('Supprimer cette étape ?'), + content: const Text('Cette étape sera retirée de la séquence.'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: const Text('Annuler'), + ), + FilledButton( + onPressed: () => Navigator.of(context).pop(true), + child: const Text('Supprimer'), + ), + ], + ), + ) ?? + false; + } + if (!confirmed || !mounted) return; + setState(() { + final removed = _stepDrafts.removeAt(index); + removed.dispose(); + _stepError = null; + }); + } + + _ExerciseStepDraft _draftFromStep(ExerciseStep step) { + return _ExerciseStepDraft( + id: step.id, + name: step.name, + type: step.type, + defaultTargetValue: step.defaultTargetValue.toString(), + hasScore: step.hasScore, + scoreInputMode: step.scoreInputMode, + scoreLabel: step.scoreLabel, + scoreUnit: step.scoreUnit, + scoreTarget: step.scoreInputMode == ScoreInputMode.stopwatch + ? _optionalDoubleText( + _millisecondsToSeconds(step.defaultTargetScoreTimeMs), + ) + : _optionalDoubleText(step.defaultTargetScore), + ); + } + + List _buildSteps() { + if (!_stepsEnabled) return const []; + return [ + for (var index = 0; index < _stepDrafts.length; index++) + _stepDrafts[index].toExerciseStep( + position: index, + defaultTargetScoreTimeMs: _stepDrafts[index].scoreInputMode == + ScoreInputMode.stopwatch + ? _optionalSecondsToMilliseconds( + _stepDrafts[index].scoreTargetController.text, + ) + : null, + ), + ]; + } + Future _importImage() async { if (_imageMediaIds.length >= 5) { _showSnackBar('Maximum 5 images par exercice.'); @@ -784,12 +1233,16 @@ final class _ExerciseFormScreenState extends State { Future _save() async { final hasMeasure = _hasTime || _hasReps || _hasScore; + final hasValidSteps = !_stepsEnabled || _stepDrafts.isNotEmpty; setState(() { _measureError = hasMeasure ? null : 'Active au moins une mesure pour enregistrer.'; + _stepError = hasValidSteps + ? null + : 'Ajoute au moins une étape ou désactive la séquence.'; }); - if (!_formKey.currentState!.validate() || !hasMeasure) { + if (!_formKey.currentState!.validate() || !hasMeasure || !hasValidSteps) { return; } @@ -832,6 +1285,7 @@ final class _ExerciseFormScreenState extends State { _hasScore && scoreInputMode == ScoreInputMode.stopwatch ? _optionalSecondsToMilliseconds(_defaultScoreTimeController.text) : null; + final steps = _buildSteps(); try { if (exercise == null) { await widget.exerciseUseCases.create( @@ -850,6 +1304,7 @@ final class _ExerciseFormScreenState extends State { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); } else { await widget.exerciseUseCases.update( @@ -869,6 +1324,7 @@ final class _ExerciseFormScreenState extends State { defaultTargetReps: defaultTargetReps, defaultTargetScore: defaultTargetScore, defaultTargetScoreTimeMs: defaultTargetScoreTimeMs, + steps: steps, ); } if (mounted) { @@ -961,6 +1417,104 @@ final class _ExerciseFormScreenState extends State { } } +enum _StepAction { moveUp, moveDown, duplicate, delete } + +final class _ExerciseStepDraft { + _ExerciseStepDraft({ + required this.id, + required String name, + this.type = ExerciseStepType.time, + required String defaultTargetValue, + this.hasScore = false, + this.scoreInputMode = ScoreInputMode.manual, + String? scoreLabel, + String? scoreUnit, + String? scoreTarget, + }) : nameController = TextEditingController(text: name), + targetController = TextEditingController(text: defaultTargetValue), + scoreLabelController = TextEditingController(text: scoreLabel), + scoreUnitController = TextEditingController(text: scoreUnit), + scoreTargetController = TextEditingController(text: scoreTarget); + + final String id; + ExerciseStepType type; + bool hasScore; + ScoreInputMode scoreInputMode; + final TextEditingController nameController; + final TextEditingController targetController; + final TextEditingController scoreLabelController; + final TextEditingController scoreUnitController; + final TextEditingController scoreTargetController; + + String get displayName { + final text = nameController.text.trim(); + return text.isEmpty ? 'Étape sans nom' : text; + } + + bool get hasFilledContent { + return nameController.text.trim().isNotEmpty || + targetController.text.trim().isNotEmpty || + hasScore || + scoreLabelController.text.trim().isNotEmpty || + scoreUnitController.text.trim().isNotEmpty || + scoreTargetController.text.trim().isNotEmpty; + } + + _ExerciseStepDraft duplicate(String id) { + return _ExerciseStepDraft( + id: id, + name: nameController.text, + type: type, + defaultTargetValue: targetController.text, + hasScore: hasScore, + scoreInputMode: scoreInputMode, + scoreLabel: scoreLabelController.text, + scoreUnit: scoreUnitController.text, + scoreTarget: scoreTargetController.text, + ); + } + + ExerciseStep toExerciseStep({ + required int position, + required int? defaultTargetScoreTimeMs, + }) { + final scoreTargetText = scoreTargetController.text.trim(); + return ExerciseStep( + id: id, + position: position, + name: nameController.text.trim(), + type: type, + defaultTargetValue: int.parse(targetController.text.trim()), + hasScore: hasScore, + scoreInputMode: hasScore ? scoreInputMode : ScoreInputMode.manual, + scoreLabel: hasScore && scoreInputMode == ScoreInputMode.manual + ? scoreLabelController.text.trim() + : null, + scoreUnit: hasScore && scoreInputMode == ScoreInputMode.manual + ? scoreUnitController.text.trim() + : null, + defaultTargetScore: + hasScore && + scoreInputMode == ScoreInputMode.manual && + scoreTargetText.isNotEmpty + ? double.parse(scoreTargetText) + : null, + defaultTargetScoreTimeMs: + hasScore && scoreInputMode == ScoreInputMode.stopwatch + ? defaultTargetScoreTimeMs + : null, + ); + } + + void dispose() { + nameController.dispose(); + targetController.dispose(); + scoreLabelController.dispose(); + scoreUnitController.dispose(); + scoreTargetController.dispose(); + } +} + final class MeasureBadge extends StatelessWidget { const MeasureBadge({ required this.measure, diff --git a/test/application/use_cases_test.dart b/test/application/use_cases_test.dart index bb02d5f..fcadb4e 100644 --- a/test/application/use_cases_test.dart +++ b/test/application/use_cases_test.dart @@ -1311,6 +1311,8 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { final results = []; final restStates = {}; final scoreStopwatchStates = {}; + final stepProgressStates = {}; + final stepResults = []; @override Future findById(String id) async { @@ -1342,6 +1344,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .firstOrNull; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return stepProgressStates.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 @@ -1369,6 +1390,24 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { .toList(); } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return stepProgressStates.values + .where((state) => state.activeWorkoutSessionId == sessionId) + .toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return stepResults + .where((result) => result.activeWorkoutSessionId == sessionId) + .toList(); + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -1384,6 +1423,29 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { scoreStopwatchStates[state.metadata.id] = state; } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async { + stepProgressStates[state.metadata.id] = state; + } + + @override + Future saveExerciseStepResult( + ActiveExerciseStepResult result, + ) async { + stepResults.removeWhere( + (existing) => + existing.activeWorkoutSessionId == result.activeWorkoutSessionId && + existing.programIndex == result.programIndex && + existing.exerciseIndex == result.exerciseIndex && + existing.setIndex == result.setIndex && + existing.passageIndex == result.passageIndex && + existing.stepIndex == result.stepIndex, + ); + stepResults.add(result); + } + @override Future deleteScoreStopwatchState({ required String sessionId, diff --git a/test/presentation/exercise_library_screen_test.dart b/test/presentation/exercise_library_screen_test.dart index 53000f9..f9fda9d 100644 --- a/test/presentation/exercise_library_screen_test.dart +++ b/test/presentation/exercise_library_screen_test.dart @@ -216,6 +216,204 @@ void main() { expect(find.text('Aucune image sélectionnée'), findsOneWidget); }); + testWidgets('activer les étapes permet d’ajouter une étape temps', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Dribble main droite', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Durée par défaut (s)').last, + '12', + ); + await tester.pump(); + + expect(find.text('1. Dribble main droite'), findsOneWidget); + expect(find.text('Temps · 12 s'), findsOneWidget); + }); + + testWidgets('ajouter une étape répétitions avec score manuel', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3600)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.tap(_stepTypeRadio('Répétitions').last); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Pompes', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Répétitions par défaut').last, + '10', + ); + await tester.tap(find.widgetWithText(SwitchListTile, 'Score d’étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Score à saisir').last, + 'Réussites', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Unité').last, + 'paniers', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Score par défaut').last, + '0', + ); + await tester.pump(); + + expect(find.text('1. Pompes'), findsOneWidget); + expect(find.text('Répétitions · 10'), findsOneWidget); + expect(find.text('Mode de score'), findsOneWidget); + }); + + testWidgets('réordonner les étapes via Monter Descendre', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 4200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').at(0), + 'Première', + ); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').at(1), + 'Deuxième', + ); + await tester.pump(); + + await tester.tap(find.byTooltip('Actions de l’étape 2')); + await tester.pumpAndSettle(); + await tester.tap(find.text('Monter')); + await tester.pumpAndSettle(); + + expect(find.text('1. Deuxième'), findsOneWidget); + expect(find.text('2. Première'), findsOneWidget); + }); + + testWidgets('supprimer une étape demande confirmation', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3200)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + + await tester.tap(find.byTooltip('Actions de l’étape 1')); + await tester.pumpAndSettle(); + await tester.tap(find.text('Supprimer')); + await tester.pumpAndSettle(); + + expect(find.text('Supprimer cette étape ?'), findsOneWidget); + + await tester.tap(find.widgetWithText(FilledButton, 'Supprimer')); + await tester.pumpAndSettle(); + + expect(find.text('Nouvelle étape'), findsNothing); + }); + + testWidgets('la limite de 8 étapes bloque l’ajout d’une neuvième', ( + tester, + ) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 8000)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + for (var index = 0; index < 8; index++) { + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + } + + expect(find.text('Limite atteinte'), findsOneWidget); + expect(find.text('Un exercice peut contenir jusqu’à 8 étapes.'), findsOneWidget); + expect(find.text('Ajouter une étape'), findsNothing); + }); + + testWidgets('sauvegarder transmet les étapes au use case', (tester) async { + final exerciseRepository = _FakeExerciseRepository(); + + await tester.binding.setSurfaceSize(const Size(400, 3600)); + addTearDown(() => tester.binding.setSurfaceSize(null)); + + await _pumpExerciseForm(tester, exerciseRepository); + await tester.enterText(find.widgetWithText(TextFormField, 'Nom'), 'Combo'); + await tester.enterText( + find.widgetWithText(TextFormField, 'Temps par défaut (s)'), + '30', + ); + await tester.tap( + find.widgetWithText(SwitchListTile, 'Rythmer cet exercice avec des étapes'), + ); + await tester.pump(); + await tester.tap(find.text('Ajouter une étape')); + await tester.pump(); + await tester.enterText( + find.widgetWithText(TextFormField, 'Nom de l’étape').last, + 'Dribble main droite', + ); + await tester.enterText( + find.widgetWithText(TextFormField, 'Durée par défaut (s)').last, + '12', + ); + + await tester.ensureVisible(find.text('Enregistrer')); + await tester.tap(find.text('Enregistrer')); + await tester.pumpAndSettle(); + + final saved = exerciseRepository.saved.single; + expect(saved.steps, hasLength(1)); + expect(saved.steps.single.name, 'Dribble main droite'); + expect(saved.steps.single.type, ExerciseStepType.time); + expect(saved.steps.single.defaultTargetValue, 12); + }); + testWidgets('désigner une image comme icône l’indique visuellement', ( tester, ) async { @@ -335,6 +533,30 @@ void main() { ); } +Future _pumpExerciseForm( + WidgetTester tester, + _FakeExerciseRepository exerciseRepository, +) { + return tester.pumpWidget( + MaterialApp( + home: ExerciseFormScreen( + exerciseUseCases: _exerciseUseCases(exerciseRepository), + mediaUseCases: _mediaUseCases(exerciseRepository), + ), + ), + ); +} + +Finder _stepTypeRadio(String title) { + return find.byWidgetPredicate( + (widget) => + widget is RadioListTile && + widget.title is Text && + (widget.title as Text).data == title, + description: 'RadioListTile "$title"', + ); +} + ExerciseUseCases _exerciseUseCases(_FakeExerciseRepository repository) { return ExerciseUseCases( repository: repository, diff --git a/test/presentation/history_screen_test.dart b/test/presentation/history_screen_test.dart index 1b81011..5b30d29 100644 --- a/test/presentation/history_screen_test.dart +++ b/test/presentation/history_screen_test.dart @@ -274,6 +274,9 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } final class _FakeWorkoutTemplateRepository @@ -335,6 +338,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { required int setIndex, }) async => null; + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async => null; + @override Future> listRestStates(String sessionId) async { return const []; @@ -352,6 +363,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return const []; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async {} @@ -361,6 +386,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async {} + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, diff --git a/test/presentation/home_screen_test.dart b/test/presentation/home_screen_test.dart index 98d030f..ad6a979 100644 --- a/test/presentation/home_screen_test.dart +++ b/test/presentation/home_screen_test.dart @@ -267,6 +267,16 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return null; + } + @override Future> listRestStates(String sessionId) async { return restStates; @@ -284,6 +294,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return results; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -299,6 +323,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { scoreStopwatchStates.add(state); } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -416,4 +448,7 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } diff --git a/test/presentation/workout_execution_screen_test.dart b/test/presentation/workout_execution_screen_test.dart index 0fedc1c..34ff377 100644 --- a/test/presentation/workout_execution_screen_test.dart +++ b/test/presentation/workout_execution_screen_test.dart @@ -1085,6 +1085,8 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { final results = []; final restStates = []; final scoreStopwatchStates = []; + final stepProgressStates = []; + final stepResults = []; @override Future findById(String id) async { @@ -1123,6 +1125,25 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + for (final state in stepProgressStates) { + 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 @@ -1144,6 +1165,24 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return results; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return stepProgressStates + .where((state) => state.activeWorkoutSessionId == sessionId) + .toList(); + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return stepResults + .where((result) => result.activeWorkoutSessionId == sessionId) + .toList(); + } + @override Future save(ActiveWorkoutSession session) async { this.session = session; @@ -1173,6 +1212,44 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { } } + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async { + final index = stepProgressStates.indexWhere( + (saved) => + saved.activeWorkoutSessionId == state.activeWorkoutSessionId && + saved.programIndex == state.programIndex && + saved.exerciseIndex == state.exerciseIndex && + saved.setIndex == state.setIndex, + ); + if (index == -1) { + stepProgressStates.add(state); + } else { + stepProgressStates[index] = state; + } + } + + @override + Future saveExerciseStepResult( + ActiveExerciseStepResult result, + ) async { + final index = stepResults.indexWhere( + (saved) => + saved.activeWorkoutSessionId == result.activeWorkoutSessionId && + saved.programIndex == result.programIndex && + saved.exerciseIndex == result.exerciseIndex && + saved.setIndex == result.setIndex && + saved.passageIndex == result.passageIndex && + saved.stepIndex == result.stepIndex, + ); + if (index == -1) { + stepResults.add(result); + } else { + stepResults[index] = result; + } + } + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -1246,6 +1323,9 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} } final class _FakeProgramRepository implements ProgramRepository { diff --git a/test/presentation/workout_template_screen_test.dart b/test/presentation/workout_template_screen_test.dart index 4ec57f4..8f1b72f 100644 --- a/test/presentation/workout_template_screen_test.dart +++ b/test/presentation/workout_template_screen_test.dart @@ -342,6 +342,16 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return null; } + @override + Future findExerciseStepProgressState({ + required String sessionId, + required int programIndex, + required int exerciseIndex, + required int setIndex, + }) async { + return null; + } + @override Future> listRestStates(String sessionId) async { return const []; @@ -359,6 +369,20 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { return const []; } + @override + Future> listExerciseStepProgressStates( + String sessionId, + ) async { + return const []; + } + + @override + Future> listExerciseStepResults( + String sessionId, + ) async { + return const []; + } + @override Future save(ActiveWorkoutSession session) async { saveCount += 1; @@ -371,6 +395,14 @@ final class _FakeActiveSessionRepository implements ActiveSessionRepository { @override Future saveScoreStopwatchState(ActiveScoreStopwatchState state) async {} + @override + Future saveExerciseStepProgressState( + ActiveExerciseStepProgressState state, + ) async {} + + @override + Future saveExerciseStepResult(ActiveExerciseStepResult result) async {} + @override Future deleteScoreStopwatchState({ required String sessionId, @@ -430,4 +462,7 @@ final class _FakeWorkoutHistoryRepository implements WorkoutHistoryRepository { @override Future saveSetResult(WorkoutHistorySetResult result) async {} + + @override + Future saveStepResult(WorkoutHistoryStepResult result) async {} }