diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-18 21:19:36 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-10-18 21:19:36 +0200 |
| commit | 8a0032d08862dcf28c653bee3fd21052e967e35d (patch) | |
| tree | 6cb0d8efe6f5c2bf9ce9eb3ef8306faecbe7cfeb /web/frontend/types.d.ts | |
| parent | d575274d00c8da251df29d5d6a636044673944a3 (diff) | |
Cut climb profile sections in the backend
The chart steps are computed in Go and shipped as finished sections, next to
the profile statistics the climb package already owns: climb.ProfileSections
cuts a Route at its widest bends under a ProfilePolicy, and
rideanalysis.MergeClimbProfile takes over the merge that lived in
web/climbs.go, so web only loads the attempt rides and maps the DTOs.
The payload carries sections instead of raw elevations, and the browser keeps
what needs the canvas: slope bands, labels, distance ticks and colours.
official-climb-profile-logic.ts and its tests are gone, replaced by
climb/profile_test.go and a page test reading the embedded profile JSON.
Diffstat (limited to 'web/frontend/types.d.ts')
| -rw-r--r-- | web/frontend/types.d.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/web/frontend/types.d.ts b/web/frontend/types.d.ts index a933d7d..a97d07d 100644 --- a/web/frontend/types.d.ts +++ b/web/frontend/types.d.ts @@ -2,6 +2,25 @@ export type ProfileBand = "downhill" | "0-3" | "3-6" | "6-9" | "9-plus"; export type BoundaryTarget = "start" | "end"; export type BoundarySource = "profile" | "map"; +// ProfileSectionPayload is one step of a climb profile as the server cuts it. +export interface ProfileSectionPayload { + startKm: number; + endKm: number; + startElevationM: number; + endElevationM: number; + slopePercent: number; +} + +// OfficialProfileSection is that step tagged with the colour band its slope falls in. +export interface OfficialProfileSection { + startDistanceKm: number; + endDistanceKm: number; + startElevation: number; + endElevation: number; + slopePercent: number; + band: ProfileBand; +} + export interface ProfilePoint { distanceKm: number; elevationM: number; @@ -14,6 +33,7 @@ export interface RideProfilePoint extends ProfilePoint { } export interface RideProfileClimb { + index: number; startKm: number; endKm: number; topKm: number; @@ -27,6 +47,7 @@ export interface RideProfileClimb { officialName?: string; startIndex: number; endIndex: number; + sections?: ProfileSectionPayload[]; } export interface RideProfileCrossing { |
