feat(exercice): modèle domain + Drift pour exercices à étapes (ticket #56)

Étend le modèle Drift (tables.dart, app_database.dart/.g.dart,
migration schemaVersion 7→8) et la couche application (entités, use
cases, repositories) pour supporter des exercices composés de
plusieurs étapes. flutter pub get OK, build_runner OK, flutter
analyze propre (mêmes 8 infos préexistantes), 87/87 tests verts,
build APK debug validé. Premier ticket du chantier "Exercice à
plusieurs étapes" (#54).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 19:32:24 +02:00
parent 73d01371d4
commit b1182db32e
8 changed files with 2958 additions and 6 deletions

View File

@ -14,6 +14,7 @@ part 'app_database.g.dart';
ChangeLogEntries,
Exercises,
ExerciseImages,
ExerciseSteps,
MediaAssets,
ProgramExercises,
Programs,
@ -37,7 +38,7 @@ final class AppDatabase extends _$AppDatabase {
}
@override
int get schemaVersion => 7;
int get schemaVersion => 8;
@override
MigrationStrategy get migration {
@ -73,6 +74,9 @@ final class AppDatabase extends _$AppDatabase {
if (from < 7) {
await _migrateToSchema7();
}
if (from < 8) {
await _migrateToSchema8(migrator);
}
await _createIndexes();
},
beforeOpen: (details) async {
@ -109,6 +113,10 @@ final class AppDatabase extends _$AppDatabase {
'CREATE INDEX IF NOT EXISTS idx_exercise_images_exercise_id '
'ON exercise_images (exercise_id)',
);
await customStatement(
'CREATE INDEX IF NOT EXISTS idx_exercise_steps_exercise_id_position '
'ON exercise_steps (exercise_id, position)',
);
await customStatement(
'CREATE INDEX IF NOT EXISTS idx_workout_template_programs_template_id '
'ON workout_template_programs (workout_template_id)',
@ -162,6 +170,7 @@ const _syncableTableNames = [
'active_workout_sessions',
'exercises',
'exercise_images',
'exercise_steps',
'media_assets',
'program_exercises',
'programs',
@ -270,4 +279,12 @@ extension on AppDatabase {
'REFERENCES media_assets(id)',
);
}
Future<void> _migrateToSchema8(Migrator migrator) async {
await migrator.createTable(exerciseSteps);
await customStatement(
'ALTER TABLE program_exercises ADD COLUMN '
'exercise_steps_snapshot_json TEXT',
);
}
}