Dashboard

This commit is contained in:
2026-04-13 08:42:22 +02:00
parent 7692f479d6
commit b6ac337652

View File

@@ -75,22 +75,11 @@ public class GoalMetricPeriodTotalService extends AbstractService<GoalMetricPeri
return intervalsActivityService.getByAthleteIdBetween(athleteId, weekStart.toString(), weekEnd.toString());
}
@Transactional
public void recalculateUpToCurrentWeek(final long athleteId) {
final LocalDate today = LocalDate.now(ZoneOffset.UTC);
final GoalMetricPeriodTotal lastWeekly = goalMetricAggregateDAO.findLastWeeklyByAthlete(athleteId);
final LocalDate startDate;
if (lastWeekly != null) {
startDate = LocalDate.of(lastWeekly.getPeriodYear(), 1, 4)
.with(WeekFields.ISO.weekOfWeekBasedYear(), lastWeekly.getPeriodIndex())
.with(WeekFields.ISO.dayOfWeek(), 1);
} else {
final IntervalsActivity earliestActivity = intervalsActivityService.getEarliestActivity(athleteId);
if (earliestActivity == null) {
return;
}
startDate = earliestActivity.getStartTime().atZone(ZoneOffset.UTC).toLocalDate()
.with(WeekFields.ISO.dayOfWeek(), 1);
final LocalDate startDate = resolveStartDate(athleteId);
if (startDate == null) {
return;
}
LocalDate weekStart = startDate;
while (!weekStart.isAfter(today)) {
@@ -101,6 +90,22 @@ public class GoalMetricPeriodTotalService extends AbstractService<GoalMetricPeri
}
}
@Transactional
@Nullable LocalDate resolveStartDate(final long athleteId) {
final GoalMetricPeriodTotal lastWeekly = goalMetricAggregateDAO.findLastWeeklyByAthlete(athleteId);
if (lastWeekly != null) {
return LocalDate.of(lastWeekly.getPeriodYear(), 1, 4)
.with(WeekFields.ISO.weekOfWeekBasedYear(), lastWeekly.getPeriodIndex())
.with(WeekFields.ISO.dayOfWeek(), 1);
}
final IntervalsActivity earliestActivity = intervalsActivityService.getEarliestActivity(athleteId);
if (earliestActivity == null) {
return null;
}
return earliestActivity.getStartTime().atZone(ZoneOffset.UTC).toLocalDate()
.with(WeekFields.ISO.dayOfWeek(), 1);
}
private void recalculateMetricForWeek(
final long athleteId,
final GoalMetricEnum metric,