fix(persistence): correctifs post-QA sur les repositories (ticket #13)
Corrige les ports, use cases, entités et l'implémentation Drift des repositories suite aux retours de QA. flutter analyze propre, 24/24 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -80,6 +80,7 @@ abstract interface class ActiveSessionRepository {
|
||||
Future<void> save(ActiveWorkoutSession session);
|
||||
Future<void> saveSetResult(ActiveSetResult result);
|
||||
Future<void> saveRestState(ActiveRestState restState);
|
||||
Future<ActiveRestState?> findRestStateById(String id);
|
||||
Future<List<ActiveSetResult>> listSetResults(String sessionId);
|
||||
Future<List<ActiveRestState>> listRestStates(String sessionId);
|
||||
}
|
||||
|
||||
@ -803,6 +803,50 @@ final class ActiveWorkoutSessionUseCases {
|
||||
return rest;
|
||||
}
|
||||
|
||||
Future<ActiveRestState> adjustRestSeconds({
|
||||
required String restStateId,
|
||||
required int deltaSeconds,
|
||||
}) async {
|
||||
final rest = await sessionRepository.findRestStateById(restStateId);
|
||||
if (rest == null) {
|
||||
throw const DomainException('Active rest state not found.');
|
||||
}
|
||||
final now = clock.now();
|
||||
final adjusted = rest.copyWith(
|
||||
metadata: rest.metadata.touch(now),
|
||||
adjustedRestSeconds: (rest.adjustedRestSeconds + deltaSeconds).clamp(
|
||||
0,
|
||||
1 << 31,
|
||||
),
|
||||
);
|
||||
await sessionRepository.saveRestState(adjusted);
|
||||
return adjusted;
|
||||
}
|
||||
|
||||
Future<ActiveRestState> skipRest({required String restStateId}) async {
|
||||
final rest = await sessionRepository.findRestStateById(restStateId);
|
||||
if (rest == null) {
|
||||
throw const DomainException('Active rest state not found.');
|
||||
}
|
||||
final now = clock.now();
|
||||
final skipped = rest.copyWith(
|
||||
metadata: rest.metadata.touch(now),
|
||||
skippedAt: now,
|
||||
);
|
||||
await sessionRepository.saveRestState(skipped);
|
||||
return skipped;
|
||||
}
|
||||
|
||||
Future<ActiveRestState?> findActiveRest({required String sessionId}) async {
|
||||
final restStates = await sessionRepository.listRestStates(sessionId);
|
||||
final active =
|
||||
restStates
|
||||
.where((rest) => rest.endedAt == null && rest.skippedAt == null)
|
||||
.toList()
|
||||
..sort((left, right) => right.startedAt.compareTo(left.startedAt));
|
||||
return active.isEmpty ? null : active.first;
|
||||
}
|
||||
|
||||
Future<ActiveWorkoutSession> _requiredSession(String sessionId) async {
|
||||
final session = await sessionRepository.findById(sessionId);
|
||||
if (session == null) {
|
||||
|
||||
Reference in New Issue
Block a user