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 findById(String id); Future> listActive(); Future save(Exercise exercise); } abstract interface class ProgramRepository { Future findById(String id); Future save(Program program); Future saveExercise(ProgramExercise exercise); } abstract interface class WorkoutTemplateRepository { Future findById(String id); Future save(WorkoutTemplate template); Future saveProgram(WorkoutTemplateProgram program); Future saveOverride(WorkoutTemplateExerciseOverride override); } abstract interface class ActiveSessionRepository { Future findById(String id); Future save(ActiveWorkoutSession session); Future saveSetResult(ActiveSetResult result); Future saveRestState(ActiveRestState restState); Future> listSetResults(String sessionId); Future> listRestStates(String sessionId); } abstract interface class WorkoutHistoryRepository { Future save(WorkoutHistory history); Future saveSetResult(WorkoutHistorySetResult result); }