aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-20 19:18:32 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-20 19:18:32 +0200
commit13aeedfbb9271444ca42efb45bbe0986ae7610ce (patch)
treeac041fa80a5fa0bd845385f2f1c5c983115a1ade
parent5242b55d878d56b71d443a440c7017015b9df2dd (diff)
feat(ride): skip rides without track points in backtest
-rw-r--r--cli/cli.go4
-rw-r--r--ride/ride.go6
2 files changed, 8 insertions, 2 deletions
diff --git a/cli/cli.go b/cli/cli.go
index 37f64bb..bf67638 100644
--- a/cli/cli.go
+++ b/cli/cli.go
@@ -3,6 +3,7 @@ package cli
import (
"context"
"database/sql"
+ "errors"
"flag"
"fmt"
"log/slog"
@@ -94,6 +95,9 @@ func runBacktest(db *sql.DB) error {
}
parsed, err := ride.ParseFile(ride.GPXRideParser{}, item.GPXPath)
if err != nil {
+ if errors.Is(err, ride.ErrNoTrackPoints) {
+ continue
+ }
slog.Warn("Failed to parse ride GPX", "ride", item.ExternalID, "file", item.GPXPath, "error", err)
continue
}
diff --git a/ride/ride.go b/ride/ride.go
index 152bca4..278880f 100644
--- a/ride/ride.go
+++ b/ride/ride.go
@@ -17,6 +17,8 @@ import (
const garminTrackPointExtensionNamespace = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
+var ErrNoTrackPoints = errors.New("ride has no track points")
+
type Ride struct {
distances []float64
elevations []float64
@@ -91,11 +93,11 @@ func (p GPXRideParser) Parse(reader io.Reader) (Ride, error) {
return Ride{}, err
}
if len(content.Tracks) == 0 || len(content.Tracks[0].Segments) == 0 {
- return Ride{}, errors.New("ride has no track segment")
+ return Ride{}, ErrNoTrackPoints
}
segment := content.Tracks[0].Segments[0]
if len(segment.Points) == 0 {
- return Ride{}, errors.New("ride has no track points")
+ return Ride{}, ErrNoTrackPoints
}
distances := make([]float64, 0, len(segment.Points))
elevations := make([]float64, 0, len(segment.Points))