feat(exercice): galerie de 5 images par exercice (ticket #35)

Étend le modèle Drift (tables.dart, app_database.dart/.g.dart), les
entités/use cases/repositories et exercise_library_screen.dart pour
supporter jusqu'à 5 images par exercice au lieu d'une seule. flutter
analyze propre, 63/63 tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 14:02:40 +02:00
parent 6419e2d9cc
commit 8bda4758f2
9 changed files with 2250 additions and 299 deletions

View File

@ -55,10 +55,6 @@ class Exercises extends SyncableTable {
TextColumn get name => text().withLength(min: 1)();
TextColumn get description => text().nullable()();
@ReferenceName('exerciseImageReferences')
TextColumn get imageMediaId =>
text().nullable().references(MediaAssets, #id)();
@ReferenceName('exerciseVideoReferences')
TextColumn get videoMediaId =>
text().nullable().references(MediaAssets, #id)();
@ -92,6 +88,22 @@ class Exercises extends SyncableTable {
];
}
class ExerciseImages extends SyncableTable {
@override
String get tableName => 'exercise_images';
TextColumn get exerciseId => text().references(Exercises, #id)();
TextColumn get mediaAssetId => text().references(MediaAssets, #id)();
IntColumn get position => integer()();
@override
List<String> get customConstraints => [
'UNIQUE (exercise_id, position)',
'UNIQUE (exercise_id, media_asset_id)',
'CHECK (position >= 0 AND position < 5)',
];
}
class Programs extends SyncableTable {
@override
String get tableName => 'programs';