Current Features:
• Registration & SignUp ✍️
• Acquiring Coach ID as Coach 🔢
• Connecting to Coach As Athlete 🤝
• Adding more complex workouts is now available as a Coach
• Adding workouts to Flocks(groups of runners
• Viewing and sharing workout details like avg HR Laps and Paces and Route map is now available for all users
• Profile Pictures 🖼️
• Password Changing
• Seeing planned workouts is now available
• Average Heart Rate Per Lap
• Elevation,Pace & HR graphs
• NEW! Sleep Analysis!
• NEW! Training Summary for a time range
• NEW! Upload Previosuly Uploaded planned workouts from the Workout Library(and edit them if needed)
• NEW! Upload and Review Strength Workouts! 🏋️
GooseNet Mobile in React Native is in the works!
The Website is here
DataBase Used in this project is FireBase RealTime DataBase
GarminApi Credentials are hidden now and are in the database
public static Dictionary<string, string> GetGarminAPICredentials()
{
// class used for Gettting and inserting data in from and to the database
FirebaseService firebaseService = new FirebaseService();
Dictionary<string, string> creds = firebaseService.GetData<Dictionary<string, string>>("GarminAPICredentials");
return creds;
} private void ConstructJsonFromFromData()
{
int intervalCount = int.Parse(Request.Form["intervalCount"]);
int currentInterval = 0;
List<Interval> intervalList = new List<Interval>();
for (int i = 0; currentInterval < intervalCount; i++)
{
currentInterval++;
if (Request.Form[$"step-{i + 1}-type"] != null)
{
intervalCount++;
if (Request.Form[$"step-{i + 1}-type"].ToString() == "rest")
{
double durationVal = 0;
switch (Request.Form[$"step-{i + 1}-duration-type"])
{
case "Kilometers":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-duration"].ToString()) * 1000;
break;
case "Meters":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-duration"].ToString());
break;
case "Minutes":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-duration"].ToString()) * 60;
break;
case "Seconds":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-duration"].ToString());
break;
}
intervalList.Add(new Interval
{
type = "WorkoutStep",
description = "Rest",
intensity = "REST",
durationValue = durationVal,
durationType = Request.Form[$"step-{i + 1}-duration-type"] == "Minutes" || Request.Form[$"step-{i + 1}-duration-type"] == "Seconds" ? "TIME" : "DISTANCE",
stepOrder = i + 1,
});
}
else
{
Interval interval = new Interval
{
stepOrder = i + 1,
description = "Run",
repeatValue = int.Parse(Request.Form[$"step-{i + 1}-repeat"]),
type = "WorkoutRepeatStep",
repeatType = "REPEAT_UNTIL_STEPS_CMPLT",
intensity = "INTERVAL"
};
List<Interval> stepsList = new List<Interval>();
for (int j = 0; j < int.Parse(Request.Form[$"step-{i + 1}-steps"]); j++)
{
double durationVal = 0;
switch (Request.Form[$"step-{i + 1}-{j + 1}-duration-type"])
{
case "Kilometers":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-{j + 1}-duration"].ToString()) * 1000;
break;
case "Meters":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-{j + 1}-duration"].ToString());
break;
case "Minutes":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-{j + 1}-duration"].ToString()) * 60;
break;
case "Seconds":
durationVal = double.Parse(Request.Form[$"step-{i + 1}-{j + 1}-duration"].ToString());
break;
}
stepsList.Add(new Interval
{
stepOrder = j + 1,
description = Request.Form[$"step-{i + 1}-{j + 1}-type"],
durationType = Request.Form[$"step-{i + 1}-{j + 1}-duration-type"] == "Kilometers" || Request.Form[$"step-{i + 1}-{j + 1}-duration-type"] == "Meters" ? "DISTANCE" : "TIME",
durationValue = durationVal,
intensity = Request.Form[$"step-{i + 1}-{j + 1}-type"] == "run" ? "INTERVAL" : "REST",
type = "WorkoutStep",
targetValueHigh = GooseNetUtils.PaceToSpeed(Request.Form[$"step-{i + 1}-{j + 1}-pace"]),
targetValueLow = GooseNetUtils.PaceToSpeed(Request.Form[$"step-{i + 1}-{j + 1}-pace"])
});
}
interval.steps = stepsList;
intervalList.Add(interval);
}
}
}
WorkoutData workout = new WorkoutData
{
workoutName = Request.Form["workoutName"],
description = Request.Form["workoutDescription"],
steps = intervalList
};
json = JsonConvert.SerializeObject(workout);
}