mirror of
https://github.com/muety/wakapi.git
synced 2025-12-05 22:20:24 -08:00
fix: make summaries display actual data range or requested interval if no data present
fix: use unix era start time in wakatime compat endpoints (resolve #843)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -73,7 +73,7 @@ func ResolveIntervalTZ(interval *models.IntervalKey, tz *time.Location, startOfW
|
||||
case models.IntervalPast12Months:
|
||||
from = now.AddDate(0, -12, 0)
|
||||
case models.IntervalAny:
|
||||
from = time.Time{}
|
||||
from = utils.UnixEra()
|
||||
default:
|
||||
err = errors.New("invalid interval")
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import (
|
||||
"github.com/muety/wakapi/models/types"
|
||||
routeutils "github.com/muety/wakapi/routes/utils"
|
||||
"github.com/muety/wakapi/services"
|
||||
"github.com/muety/wakapi/utils"
|
||||
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
@@ -63,7 +65,7 @@ func (h *AllTimeHandler) Get(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
func (h *AllTimeHandler) loadUserSummary(user *models.User, filters *models.Filters) (*models.Summary, error, int) {
|
||||
summaryParams := &models.SummaryParams{
|
||||
From: time.Time{},
|
||||
From: utils.UnixEra(),
|
||||
To: time.Now(),
|
||||
User: user,
|
||||
Recompute: false,
|
||||
|
||||
@@ -150,6 +150,11 @@ func (srv *SummaryService) Retrieve(from, to time.Time, user *models.User, filte
|
||||
// prevent 0001-01-01T00:00:00 caused by empty "pre" missing interval, see https://github.com/muety/wakapi/issues/843
|
||||
summary.FromTime = models.CustomTime(condition.Ternary(summary.FromTime.T().Before(from), from, summary.FromTime.T()))
|
||||
|
||||
if summary.TotalTime() == 0 {
|
||||
summary.FromTime = models.CustomTime(from)
|
||||
summary.ToTime = models.CustomTime(to)
|
||||
}
|
||||
|
||||
if filters != nil && filters.CountDistinctTypes() == 1 && filters.SelectFilteredOnly {
|
||||
filter := filters.OneOrEmpty()
|
||||
summary.KeepOnly(map[uint8]bool{filter.Entity: true}).ApplyFilter(filter)
|
||||
@@ -365,11 +370,12 @@ func (srv *SummaryService) mergeSummaries(summaries []*models.Summary) (*models.
|
||||
return nil, errors.New("users don't match")
|
||||
}
|
||||
|
||||
if s.FromTime.T().Before(minTime) {
|
||||
totalTime := s.TotalTime()
|
||||
|
||||
if s.FromTime.T().Before(minTime) && totalTime > 0 { // only consider non-empty summaries
|
||||
minTime = s.FromTime.T()
|
||||
}
|
||||
|
||||
if s.ToTime.T().After(maxTime) {
|
||||
if s.ToTime.T().After(maxTime) && totalTime > 0 { // only consider non-empty summaries
|
||||
maxTime = s.ToTime.T()
|
||||
}
|
||||
|
||||
@@ -388,7 +394,7 @@ func (srv *SummaryService) mergeSummaries(summaries []*models.Summary) (*models.
|
||||
}
|
||||
|
||||
finalSummary.FromTime = models.CustomTime(minTime)
|
||||
finalSummary.ToTime = models.CustomTime(maxTime)
|
||||
finalSummary.ToTime = models.CustomTime(condition.Ternary(maxTime.Before(minTime), minTime, maxTime))
|
||||
|
||||
return finalSummary, nil
|
||||
}
|
||||
|
||||
@@ -462,8 +462,8 @@ func (suite *SummaryServiceTestSuite) TestSummaryService_Retrieve_DateRange() {
|
||||
|
||||
assert.Nil(suite.T(), err)
|
||||
assert.NotNil(suite.T(), result)
|
||||
assert.Equal(suite.T(), from, result.FromTime.T()) // requested from date
|
||||
assert.Equal(suite.T(), to, result.ToTime.T()) // requested to date
|
||||
assert.Equal(suite.T(), summaries[0].FromTime.T(), result.FromTime.T()) // actual first data date
|
||||
assert.Equal(suite.T(), summaries[0].ToTime.T(), result.ToTime.T()) // actual last data date
|
||||
suite.DurationService.AssertNumberOfCalls(suite.T(), "Get", 2)
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,10 @@ import (
|
||||
"github.com/duke-git/lancet/v2/datetime"
|
||||
)
|
||||
|
||||
func UnixEra() time.Time {
|
||||
return time.Unix(0, 0)
|
||||
}
|
||||
|
||||
func MustParseTime(layout, value string) time.Time {
|
||||
t, _ := time.Parse(layout, value)
|
||||
return t
|
||||
|
||||
Reference in New Issue
Block a user