feat(application): couche application avec use cases et repositories

Ajoute les entités du domaine (domain/entities.dart), les ports de
repository (application/ports.dart), les use cases (application/use_cases.dart)
et leur implémentation Drift (infrastructure/local/drift_repositories.dart).
flutter analyze propre, tests unitaires verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 18:26:47 +02:00
parent c010f19670
commit b4275d64d8
9 changed files with 2061 additions and 1 deletions

View File

@ -0,0 +1,49 @@
import '../domain/domain.dart';
abstract interface class Clock {
DateTime now();
}
final class SystemClock implements Clock {
const SystemClock();
@override
DateTime now() => DateTime.now().toUtc();
}
abstract interface class IdGenerator {
String newId();
}
abstract interface class ExerciseRepository {
Future<Exercise?> findById(String id);
Future<List<Exercise>> listActive();
Future<void> save(Exercise exercise);
}
abstract interface class ProgramRepository {
Future<Program?> findById(String id);
Future<void> save(Program program);
Future<void> saveExercise(ProgramExercise exercise);
}
abstract interface class WorkoutTemplateRepository {
Future<WorkoutTemplate?> findById(String id);
Future<void> save(WorkoutTemplate template);
Future<void> saveProgram(WorkoutTemplateProgram program);
Future<void> saveOverride(WorkoutTemplateExerciseOverride override);
}
abstract interface class ActiveSessionRepository {
Future<ActiveWorkoutSession?> findById(String id);
Future<void> save(ActiveWorkoutSession session);
Future<void> saveSetResult(ActiveSetResult result);
Future<void> saveRestState(ActiveRestState restState);
Future<List<ActiveSetResult>> listSetResults(String sessionId);
Future<List<ActiveRestState>> listRestStates(String sessionId);
}
abstract interface class WorkoutHistoryRepository {
Future<void> save(WorkoutHistory history);
Future<void> saveSetResult(WorkoutHistorySetResult result);
}