aboutsummaryrefslogtreecommitdiff
path: root/ride/store.go
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 11:21:17 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 11:21:17 +0200
commit825cf388b55a6c8441e02149749bb6e2968477c0 (patch)
treee3394cef97aa43df9775a1465d3c99f386ce3a9b /ride/store.go
parent366e7b0d671395c2ad32f85ee7706a592db69d15 (diff)
Extract climb detection into a dedicated climb package
Move climb detection, slope, and Cotacol scoring out of ride into a new climb package that operates on a geometry-only Route (distances, elevations, coords). Ride embeds climb.Route and keeps its timing and telemetry columns. - climb.Detect returns []DetectedClimb (Climb + ride-absolute Start). - Climb owns its sliced geometry; indices are local, with Start reported at the detection boundary for absolute position. - Detected bounds use core.Interval; freeRegions claim suppression fixed. - ride no longer builds slices: ClimbFromDist/ClimbFromIndexes/climbFrom and ride.Climb/Interval/Range are removed; rideanalysis, mountain_pass MatchClimb, and web views are rewired to climb types. - New internal/routetest builds climb.Route from the ride DSL; ridetest reuses it and adds timestamps and telemetry. - Tests moved to climb (synthetic detection and difficulty) and kept in ride for GPX-example integration; ride.comparison detection coverage retained. - mountain_pass.nearestCrossing now reuses geo.Nearest.
Diffstat (limited to 'ride/store.go')
-rw-r--r--ride/store.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/ride/store.go b/ride/store.go
index 2d022ad..b906b42 100644
--- a/ride/store.go
+++ b/ride/store.go
@@ -7,6 +7,7 @@ import (
"strings"
"time"
+ "github.com/martinlehoux/biking_home/climb"
"github.com/martinlehoux/kagamigo/kcore"
)
@@ -57,8 +58,8 @@ func Save(db *sql.DB, r StoredRide) error {
if err != nil {
return fmt.Errorf("compute ride values for %q: %w", r.ExternalID, err)
}
- cotacolScore = Cotacol(parsed)
- cotacolAlgorithmVersion = CotacolAlgorithmVersion
+ cotacolScore = climb.Cotacol(parsed.Distances, parsed.Elevations)
+ cotacolAlgorithmVersion = climb.CotacolAlgorithmVersion
movingTimeS = int64(MovingTime(parsed) / time.Second)
movingTimeAlgorithmVersion = MovingTimeAlgorithmVersion
}
@@ -151,7 +152,7 @@ func ListSorted(db *sql.DB, column SortColumn, descending bool) ([]StoredRide, e
args = append(args, MovingTimeAlgorithmVersion)
} else if isComputedSort(column) {
query += "(cotacol_score IS NULL OR cotacol_algo_version IS NULL OR cotacol_algo_version <> ? OR distance_m <= 0) ASC, "
- args = append(args, CotacolAlgorithmVersion)
+ args = append(args, climb.CotacolAlgorithmVersion)
}
query += expression + " " + direction + ", id DESC"
rows, err := db.Query(query, args...)