Skip to content

Commit

Permalink
fix: aggregator to handle enhanced fields (#405)
Browse files Browse the repository at this point in the history
  • Loading branch information
muktihari committed Sep 8, 2024
1 parent fcc760f commit 87c075a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 12 deletions.
6 changes: 3 additions & 3 deletions cmd/fitactivity/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ We will aggregate fields depends on the prefix and suffix of the field name:

- prefix **'total**': sum of the two values. (e.g. **total_elapsed_time**)
- prefix **'num**' and suffix **'s**': sum of the two values. (e.g. **num_splits**)
- prefix **'max**': max value between two values. (e.g. **max_heart_rate**)
- prefix **'min**': min value between two values. (e.g. **min_cadence**)
- prefix **'avg**': average of the two values. (e.g. **avg_temperature**)
- prefix **'max**' or **'enhanced_max'**: max value between two values. (e.g. **max_heart_rate**, **enhanced_max_respiration_rate**)
- prefix **'min**' or **'enhanced_min'**: min value between two values. (e.g. **min_cadence**, **enhanced_min_altitude**)
- prefix **'avg**' or **'enhanced_avg'**: average of the two values. (e.g. **avg_temperature**, **enhanced_avg_speed**)

Otherwise, they will be assigned with value from the corresponding field only if they are invalid.

Expand Down
18 changes: 9 additions & 9 deletions cmd/fitactivity/aggregator/aggregator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import (
// should be a pointer to a struct, otherwise, it panics.
// The logic depends on the prefix of the Field's Name; If it starts with:
// - "Total": sum of the two values.
// - "Max": max value between the two values.
// - "Min": min value between the two values.
// - "Avg": avg of the two values.
// - "Max" or "EnhancedMax": max value between the two values.
// - "Min" or "EnhancedMin": min value between the two values.
// - "Avg" or "EnhancedAvg": avg of the two values.
// - "Num" and ends with "s": sum of the two values.
// (e.g. NumSplits, NumLaps, NumSessions)
// - Otherwise: fill with src's Value only if dst's Value is invalid.
Expand All @@ -41,12 +41,12 @@ func Aggregate[T any](dst, src T) {
sum(dv.Field(i), sv.Field(i)) // TotalElapsedTime, TotalCycles, etc.
case strings.HasPrefix(f.Name, "Num") && strings.HasSuffix(f.Name, "s"):
sum(dv.Field(i), sv.Field(i)) // NumSessions, NumLaps, NumSplits, etc.
case strings.HasPrefix(f.Name, "Max"):
max(dv.Field(i), sv.Field(i)) // MaxHeartRate, MaxCadence, etc.
case strings.HasPrefix(f.Name, "Min"):
min(dv.Field(i), sv.Field(i)) // MinHeartRate, MinCadence, etc.
case strings.HasPrefix(f.Name, "Avg"):
avg(dv.Field(i), sv.Field(i)) // AvgHeartRate, AvgCadence, etc.
case strings.HasPrefix(f.Name, "Max") || strings.HasPrefix(f.Name, "EnhancedMax"):
max(dv.Field(i), sv.Field(i)) // MaxHeartRate, MaxCadence, EnhancedMaxRespirationRate, etc.
case strings.HasPrefix(f.Name, "Min") || strings.HasPrefix(f.Name, "EnhancedMin"):
min(dv.Field(i), sv.Field(i)) // MinHeartRate, MinCadence, EnhancedAltitude, etc.
case strings.HasPrefix(f.Name, "Avg") || strings.HasPrefix(f.Name, "EnhancedAvg"):
avg(dv.Field(i), sv.Field(i)) // AvgHeartRate, AvgCadence, EnhancedAvgSpeed, etc..
default:
fill(dv.Field(i), sv.Field(i)) // Timestamp, Sport, Event, etc.
}
Expand Down
18 changes: 18 additions & 0 deletions cmd/fitactivity/aggregator/aggregator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,36 @@ func TestAggregate(t *testing.T) {
src: mesgdef.NewSession(nil).SetMaxAltitude(2000),
exp: mesgdef.NewSession(nil).SetMaxAltitude(2000),
},
{
name: "EnhancedMax",
dst: mesgdef.NewSession(nil).SetEnhancedMaxAltitude(1000),
src: mesgdef.NewSession(nil).SetEnhancedMaxAltitude(2000),
exp: mesgdef.NewSession(nil).SetEnhancedMaxAltitude(2000),
},
{
name: "Min",
dst: mesgdef.NewSession(nil).SetMinHeartRate(60),
src: mesgdef.NewSession(nil).SetMinHeartRate(80),
exp: mesgdef.NewSession(nil).SetMinHeartRate(60),
},
{
name: "EnhancedMin",
dst: mesgdef.NewSession(nil).SetEnhancedMinAltitude(60),
src: mesgdef.NewSession(nil).SetEnhancedMinAltitude(80),
exp: mesgdef.NewSession(nil).SetEnhancedMinAltitude(60),
},
{
name: "Avg",
dst: mesgdef.NewSession(nil).SetAvgTemperature(20),
src: mesgdef.NewSession(nil).SetAvgTemperature(22),
exp: mesgdef.NewSession(nil).SetAvgTemperature(21),
},
{
name: "EnhancedAvg",
dst: mesgdef.NewSession(nil).SetEnhancedAvgAltitude(60),
src: mesgdef.NewSession(nil).SetEnhancedAvgAltitude(80),
exp: mesgdef.NewSession(nil).SetEnhancedAvgAltitude(70),
},
{
name: "Fill dst invalid",
dst: mesgdef.NewSession(nil),
Expand Down

0 comments on commit 87c075a

Please sign in to comment.