getDoneExercisesInSeconds method

Future<int> getDoneExercisesInSeconds(
  1. String userEmail, {
  2. DateTime? day,
})

Returns the total number of seconds the user exercised on a given day.

Defaults to today if no day is specified.

Implementation

Future<int> getDoneExercisesInSeconds(String userEmail,
    {DateTime? day}) async {
  final userRef = await _getUserDocRef(userEmail);

  final DateTime targetDay = day ?? DateTime.now();
  final dayStart = DateTime(targetDay.year, targetDay.month, targetDay.day);
  final nextDayStart = dayStart.add(const Duration(days: 1));

  final logs = await userRef
      .collection('exerciseLogs')
      .where('startTime',
          isGreaterThanOrEqualTo: Timestamp.fromDate(dayStart))
      .where('startTime', isLessThan: Timestamp.fromDate(nextDayStart))
      .get();

  int total = 0;

  for (final doc in logs.docs) {
    final data = doc.data();
    final start = (data['startTime'] as Timestamp?)?.toDate();
    final end = (data['endTime'] as Timestamp?)?.toDate();

    if (start != null && end != null) {
      total += end.difference(start).inSeconds;
    }
  }

  return total;
}