fix(mileage): bound daily date ranges

This commit is contained in:
lingniu
2026-07-16 08:44:00 +08:00
parent 91b5d76657
commit 99d9dcca1b
5 changed files with 72 additions and 13 deletions

View File

@@ -419,6 +419,21 @@ func TestNormalizeMileageStatisticsWindow(t *testing.T) {
}
}
func TestNormalizeDailyMileageWindowBoundsOnlyDateFilteredQueries(t *testing.T) {
now := time.Date(2026, 7, 14, 12, 0, 0, 0, time.Local)
unfiltered, err := normalizeDailyMileageWindow(url.Values{"limit": {"20"}}, now)
if err != nil || unfiltered.Get("dateFrom") != "" || unfiltered.Get("dateTo") != "" {
t.Fatalf("unfiltered daily mileage must stay compatible: %v, err=%v", unfiltered, err)
}
toOnly, err := normalizeDailyMileageWindow(url.Values{"dateTo": {"2026-07-14"}}, now)
if err != nil || toOnly.Get("dateFrom") != "2026-06-15" {
t.Fatalf("dateTo-only daily mileage should receive a bounded default start: %v, err=%v", toOnly, err)
}
if _, err := normalizeDailyMileageWindow(url.Values{"dateFrom": {"2025-01-01"}, "dateTo": {"2026-07-14"}}, now); err == nil {
t.Fatal("date-filtered daily mileage over 366 days must be rejected")
}
}
func TestNormalizeMileageVINSelection(t *testing.T) {
normalized, err := normalizeMileageVINSelection(url.Values{"vins": {" VIN001,VIN002,VIN001 "}})
if err != nil || normalized.Get("vins") != "VIN001,VIN002" {

View File

@@ -3177,6 +3177,10 @@ func (s *Service) DailyMileage(ctx context.Context, query url.Values) (Page[Dail
if err != nil {
return Page[DailyMileageRow]{}, err
}
resolvedQuery, err = normalizeDailyMileageWindow(resolvedQuery, time.Now())
if err != nil {
return Page[DailyMileageRow]{}, err
}
return s.store.DailyMileage(ctx, resolvedQuery)
}
@@ -3243,6 +3247,13 @@ func normalizeMileageStatisticsWindow(query url.Values, now time.Time) (url.Valu
return next, nil
}
func normalizeDailyMileageWindow(query url.Values, now time.Time) (url.Values, error) {
if strings.TrimSpace(query.Get("dateFrom")) == "" && strings.TrimSpace(query.Get("dateTo")) == "" {
return cloneValues(query), nil
}
return normalizeMileageStatisticsWindow(query, now)
}
func (s *Service) OnlineStatisticsSummary(ctx context.Context, query url.Values) (OnlineStatisticsSummary, error) {
resolvedQuery, err := s.resolveVehicleQuery(ctx, query)
if err != nil {