From ada0863f7c5951c8df8cc95d1c9bdbafc54dd8de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 23 Aug 2020 13:10:58 +0200 Subject: [PATCH] fix: make summary include timestamp of first and last heartbeat (resolve #18) --- services/summary.go | 20 ++++++++++++++++++-- utils/date.go | 4 ++-- version.txt | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/services/summary.go b/services/summary.go index ced2a89..156dea5 100644 --- a/services/summary.go +++ b/services/summary.go @@ -96,10 +96,25 @@ func (srv *SummaryService) Construct(from, to time.Time, user *models.User, reco } close(c) + realFrom, realTo := from, to + if len(existingSummaries) > 0 { + realFrom = existingSummaries[0].FromTime + realTo = existingSummaries[len(existingSummaries)-1].ToTime + } + if len(heartbeats) > 0 { + t1, t2 := time.Time(heartbeats[0].Time), time.Time(heartbeats[len(heartbeats)-1].Time) + if t1.After(realFrom) && t1.Before(time.Date(realFrom.Year(), realFrom.Month(), realFrom.Day()+1, 0, 0, 0, 0, realFrom.Location())) { + realFrom = t1 + } + if t2.Before(realTo) && t2.After(time.Date(realTo.Year(), realTo.Month(), realTo.Day()-1, 0, 0, 0, 0, realTo.Location())) { + realTo = t2 + } + } + aggregatedSummary := &models.Summary{ UserID: user.ID, - FromTime: from, - ToTime: to, + FromTime: realFrom, + ToTime: realTo, Projects: projectItems, Languages: languageItems, Editors: editorItems, @@ -134,6 +149,7 @@ func (srv *SummaryService) GetByUserWithin(user *models.User, from, to time.Time Where(&models.Summary{UserID: user.ID}). Where("from_time >= ?", from). Where("to_time <= ?", to). + Order("from_time asc"). Preload("Projects", "type = ?", models.SummaryProject). Preload("Languages", "type = ?", models.SummaryLanguage). Preload("Editors", "type = ?", models.SummaryEditor). diff --git a/utils/date.go b/utils/date.go index 5bf4cd3..ad93b55 100644 --- a/utils/date.go +++ b/utils/date.go @@ -15,12 +15,12 @@ func StartOfWeek() time.Time { func StartOfMonth() time.Time { ref := time.Now() - return time.Date(ref.Year(), ref.Month(), 0, 0, 0, 0, 0, ref.Location()) + return time.Date(ref.Year(), ref.Month(), 1, 0, 0, 0, 0, ref.Location()) } func StartOfYear() time.Time { ref := time.Now() - return time.Date(ref.Year(), time.January, 0, 0, 0, 0, 0, ref.Location()) + return time.Date(ref.Year(), time.January, 1, 0, 0, 0, 0, ref.Location()) } // https://stackoverflow.com/a/18632496 diff --git a/version.txt b/version.txt index 0a182f2..bbf649f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.7.2 \ No newline at end of file +1.7.3 \ No newline at end of file