Files
aicyclingcoach-go/internal/garmin/activity_mapping.go
2025-09-17 17:30:18 -07:00

50 lines
1.5 KiB
Go

package garmin
import (
"fmt"
"time"
"github.com/sstent/fitness-tui/internal/garmin/garth/types"
"github.com/sstent/fitness-tui/internal/tui/models"
)
// MapGarminType converts Garmin activity types to internal analysis types
func MapGarminType(garminType types.ActivityType) string {
switch garminType.TypeKey {
case "cycling", "road_biking", "mountain_biking", "indoor_cycling":
return "cycling"
case "running", "treadmill_running", "trail_running":
return "running"
case "hiking", "walking":
return "hiking"
case "swimming":
return "swimming"
case "triathlon":
return "triathlon"
default:
return "other"
}
}
// ToActivityModel converts Garmin activity data to our internal Activity model
func ToActivityModel(garminActivity *types.Activity) *models.Activity {
return &models.Activity{
ID: fmt.Sprintf("%d", garminActivity.ActivityID),
Name: garminActivity.ActivityName,
Description: garminActivity.Description,
Type: garminActivity.ActivityType.TypeKey,
ActivityType: MapGarminType(garminActivity.ActivityType),
Date: garminActivity.StartTimeLocal.Time,
Duration: time.Duration(garminActivity.Duration * float64(time.Second)),
Distance: garminActivity.Distance,
Elevation: garminActivity.ElevationGain,
Calories: int(garminActivity.Calories),
Metrics: models.ActivityMetrics{
AvgHeartRate: int(garminActivity.AverageHR),
MaxHeartRate: int(garminActivity.MaxHR),
AvgSpeed: garminActivity.AverageSpeed,
ElevationGain: garminActivity.ElevationGain,
},
}
}