garmin-connect icon indicating copy to clipboard operation
garmin-connect copied to clipboard

Add support for workouts

Open tom-dudley opened this issue 1 year ago • 0 comments

This PR adds support for workouts (create, get, list, update and delete) and the ability to schedule them (create, list and delete). I've attached some docs at the end of the PR.

I've opted for a bunch of pointers in the Workout struct mainly to handle nil/null. This does mean consuming isn't 100% ideal, but seemed the best compromise (over pulling in other dependencies or leaving "" all over).

Happy to hear feedback and adjust accordingly.

API

Create workout

See below for example workout

workoutResponse, err := client.CreateWorkout(workout)

Get workout

workout, err := client.GetWorkout(workoutId)

Update workout

err = client.UpdateWorkout(workout)

Delete workout

client.DeleteScheduledWorkout(workoutScheduleId)

List workouts

workouts, err := client.Workout()

Schedule workout

workoutSchedule, err := client.ScheduleWorkout(workout, time.Date(...))

Get scheduled workouts

workoutSchedules, err := client.WorkoutSchedule(year, month)

Example workout

workoutToCreate := &connect.Workout{
    SportType: &connect.SportType{
        SportTypeId:  1,
        SportTypeKey: "running",
    },
    WorkoutName: "Test12345",
    WorkoutSegments: []*connect.WorkoutSegment{
        {
            SegmentOrder: 1,
            SportType: connect.SportType{
                SportTypeId:  1,
                SportTypeKey: "running",
            },
            WorkoutSteps: []connect.WorkoutStep{
                {
                    StepId:    1,
                    Type:      "ExecutableStepDTO",
                    StepOrder: 1,
                    StepType: &connect.StepType{
                        StepTypeId:  1,
                        StepTypeKey: "warmup",
                    },
                    EndCondition: &connect.EndCondition{
                        ConditionTypeId:  1,
                        ConditionTypeKey: "lap.button",
                    },
                    TargetType: &connect.TargetType{
                        WorkoutTargetTypeId:  1,
                        WorkoutTargetTypeKey: "no.target",
                    },
                },
            },
        },
    },
    AvgTrainingSpeed: 3.0,
}

tom-dudley avatar Feb 21 '23 22:02 tom-dudley