mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
fix: make wakatime summary endpoint date range inclusive (resolve #192)
This commit is contained in:
parent
331ace3c1e
commit
37d4d58b57
@ -58,6 +58,7 @@ type SummariesRange struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewSummariesFrom(summaries []*models.Summary, filters *models.Filters) *SummariesViewModel {
|
func NewSummariesFrom(summaries []*models.Summary, filters *models.Filters) *SummariesViewModel {
|
||||||
|
// TODO: implement filtering (https://github.com/muety/wakapi/issues/58)
|
||||||
data := make([]*SummariesData, len(summaries))
|
data := make([]*SummariesData, len(summaries))
|
||||||
minDate, maxDate := time.Now().Add(1*time.Second), time.Time{}
|
minDate, maxDate := time.Now().Add(1*time.Second), time.Time{}
|
||||||
|
|
||||||
|
@ -110,6 +110,12 @@ func (h *SummariesHandler) loadUserSummaries(r *http.Request) ([]*models.Summary
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wakatime iterprets end date as "inclusive", wakapi usually as "exclusive"
|
||||||
|
// i.e. for wakatime, an interval 2021-04-29 - 2021-04-29 is actually 2021-04-29 - 2021-04-30,
|
||||||
|
// while for wakapi it would be empty
|
||||||
|
// see https://github.com/muety/wakapi/issues/192
|
||||||
|
end = utils.EndOfDay(end).Add(-1 * time.Second)
|
||||||
|
|
||||||
overallParams := &models.SummaryParams{
|
overallParams := &models.SummaryParams{
|
||||||
From: start,
|
From: start,
|
||||||
To: end,
|
To: end,
|
||||||
@ -125,6 +131,9 @@ func (h *SummariesHandler) loadUserSummaries(r *http.Request) ([]*models.Summary
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err, http.StatusInternalServerError
|
return nil, err, http.StatusInternalServerError
|
||||||
}
|
}
|
||||||
|
// wakatime returns requested instead of actual summary range
|
||||||
|
summary.FromTime = models.CustomTime(interval[0])
|
||||||
|
summary.ToTime = models.CustomTime(interval[1].Add(-1 * time.Second))
|
||||||
summaries[i] = summary
|
summaries[i] = summary
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,18 @@ func StartOfToday(tz *time.Location) time.Time {
|
|||||||
return StartOfDay(FloorDate(time.Now().In(tz)))
|
return StartOfDay(FloorDate(time.Now().In(tz)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EndOfDay(date time.Time) time.Time {
|
||||||
|
floored := FloorDate(date)
|
||||||
|
if floored == date {
|
||||||
|
date = date.Add(1 * time.Second)
|
||||||
|
}
|
||||||
|
return CeilDate(date)
|
||||||
|
}
|
||||||
|
|
||||||
|
func EndOfToday(tz *time.Location) time.Time {
|
||||||
|
return EndOfDay(time.Now().In(tz))
|
||||||
|
}
|
||||||
|
|
||||||
func StartOfThisWeek(tz *time.Location) time.Time {
|
func StartOfThisWeek(tz *time.Location) time.Time {
|
||||||
return StartOfWeek(time.Now().In(tz))
|
return StartOfWeek(time.Now().In(tz))
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,28 @@ func TestDate_StartOfDay(t *testing.T) {
|
|||||||
assert.Equal(t, tzCet, StartOfDay(d4).Location())
|
assert.Equal(t, tzCet, StartOfDay(d4).Location())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDate_EndOfDay(t *testing.T) {
|
||||||
|
d1, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzLocal)
|
||||||
|
d2, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzUtc)
|
||||||
|
d3, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzPst)
|
||||||
|
d4, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzCet)
|
||||||
|
|
||||||
|
t1, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-26 00:00:00", tzLocal)
|
||||||
|
t2, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-26 00:00:00", tzUtc)
|
||||||
|
t3, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-26 00:00:00", tzPst)
|
||||||
|
t4, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-26 00:00:00", tzCet)
|
||||||
|
|
||||||
|
assert.Equal(t, t1, EndOfDay(d1))
|
||||||
|
assert.Equal(t, t2, EndOfDay(d2))
|
||||||
|
assert.Equal(t, t3, EndOfDay(d3))
|
||||||
|
assert.Equal(t, t4, EndOfDay(d4))
|
||||||
|
|
||||||
|
assert.Equal(t, tzLocal, EndOfDay(d1).Location())
|
||||||
|
assert.Equal(t, tzUtc, EndOfDay(d2).Location())
|
||||||
|
assert.Equal(t, tzPst, EndOfDay(d3).Location())
|
||||||
|
assert.Equal(t, tzCet, EndOfDay(d4).Location())
|
||||||
|
}
|
||||||
|
|
||||||
func TestDate_StartOfWeek(t *testing.T) {
|
func TestDate_StartOfWeek(t *testing.T) {
|
||||||
d1, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzLocal)
|
d1, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzLocal)
|
||||||
d2, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzUtc)
|
d2, _ := time.ParseInLocation(config.SimpleDateTimeFormat, "2021-04-25 20:25:00", tzUtc)
|
||||||
|
@ -1 +1 @@
|
|||||||
1.26.8
|
1.26.9
|
||||||
|
Loading…
Reference in New Issue
Block a user