2488 lines
87 KiB
Plaintext
2488 lines
87 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Goal is to display all workouts\n",
|
|
"#### * Query database\n",
|
|
"#### * Transform models into viewmodels\n",
|
|
"#### * Display data to user"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 45,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import sqlite3\n",
|
|
"import json\n",
|
|
"from datetime import datetime"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"DATABASE = 'workout.db'"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Define function to query database"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def query_db(query, args=(), one=False):\n",
|
|
" conn = sqlite3.connect(DATABASE)\n",
|
|
" conn.row_factory = sqlite3.Row\n",
|
|
" cur = conn.execute(query, args)\n",
|
|
" rv = cur.fetchall()\n",
|
|
" conn.commit()\n",
|
|
" cur.close()\n",
|
|
" return (rv[0] if rv else None) if one else rv"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Query all workouts & topsets completed by Gabe(PersonId=1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 70,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"WorkoutId: 35, PersonId: 1 Person:Gabe, StartDate: 2022-01-13, TopSetId: 61, ExerciseId: 2, Exercise: Bench, Repetitions: 8, Weight: 50kg\n",
|
|
"WorkoutId: 36, PersonId: 1 Person:Gabe, StartDate: 2022-01-18, TopSetId: 62, ExerciseId: 1, Exercise: Squat, Repetitions: 7, Weight: 55kg\n",
|
|
"WorkoutId: 36, PersonId: 1 Person:Gabe, StartDate: 2022-01-18, TopSetId: 63, ExerciseId: 4, Exercise: Hotep, Repetitions: 4, Weight: 25kg\n",
|
|
"WorkoutId: 37, PersonId: 1 Person:Gabe, StartDate: 2022-02-08, TopSetId: 64, ExerciseId: 2, Exercise: Bench, Repetitions: 5, Weight: 55kg\n",
|
|
"WorkoutId: 37, PersonId: 1 Person:Gabe, StartDate: 2022-02-08, TopSetId: 65, ExerciseId: 3, Exercise: Deadlift, Repetitions: 6, Weight: 95kg\n",
|
|
"WorkoutId: 38, PersonId: 1 Person:Gabe, StartDate: 2022-02-15, TopSetId: 66, ExerciseId: 1, Exercise: Squat, Repetitions: 3, Weight: 65kg\n",
|
|
"WorkoutId: 38, PersonId: 1 Person:Gabe, StartDate: 2022-02-15, TopSetId: 67, ExerciseId: 4, Exercise: Hotep, Repetitions: 6, Weight: 25kg\n",
|
|
"WorkoutId: 39, PersonId: 1 Person:Gabe, StartDate: 2022-02-17, TopSetId: 68, ExerciseId: 2, Exercise: Bench, Repetitions: 2, Weight: 60kg\n",
|
|
"WorkoutId: 39, PersonId: 1 Person:Gabe, StartDate: 2022-02-17, TopSetId: 69, ExerciseId: 3, Exercise: Deadlift, Repetitions: 8, Weight: 105kg\n",
|
|
"WorkoutId: 40, PersonId: 1 Person:Gabe, StartDate: 2022-03-01, TopSetId: 70, ExerciseId: 1, Exercise: Squat, Repetitions: 3, Weight: 75kg\n",
|
|
"WorkoutId: 40, PersonId: 1 Person:Gabe, StartDate: 2022-03-01, TopSetId: 71, ExerciseId: 4, Exercise: Hotep, Repetitions: 4, Weight: 30kg\n",
|
|
"WorkoutId: 41, PersonId: 1 Person:Gabe, StartDate: 2022-03-10, TopSetId: 72, ExerciseId: 2, Exercise: Bench, Repetitions: 11, Weight: 50kg\n",
|
|
"WorkoutId: 42, PersonId: 1 Person:Gabe, StartDate: 2022-03-15, TopSetId: 73, ExerciseId: 1, Exercise: Squat, Repetitions: 5, Weight: 75kg\n",
|
|
"WorkoutId: 42, PersonId: 1 Person:Gabe, StartDate: 2022-03-15, TopSetId: 74, ExerciseId: 4, Exercise: Hotep, Repetitions: 5, Weight: 30kg\n",
|
|
"WorkoutId: 43, PersonId: 1 Person:Gabe, StartDate: 2022-03-22, TopSetId: 75, ExerciseId: 2, Exercise: Bench, Repetitions: 4, Weight: 60kg\n",
|
|
"WorkoutId: 43, PersonId: 1 Person:Gabe, StartDate: 2022-03-22, TopSetId: 76, ExerciseId: 3, Exercise: Deadlift, Repetitions: 4, Weight: 110kg\n",
|
|
"WorkoutId: 44, PersonId: 1 Person:Gabe, StartDate: 2022-04-07, TopSetId: 77, ExerciseId: 1, Exercise: Squat, Repetitions: 6, Weight: 75kg\n",
|
|
"WorkoutId: 44, PersonId: 1 Person:Gabe, StartDate: 2022-04-07, TopSetId: 78, ExerciseId: 4, Exercise: Hotep, Repetitions: 2, Weight: 35kg\n",
|
|
"WorkoutId: 45, PersonId: 1 Person:Gabe, StartDate: 2022-04-21, TopSetId: 79, ExerciseId: 2, Exercise: Bench, Repetitions: 10, Weight: 45kg\n",
|
|
"WorkoutId: 45, PersonId: 1 Person:Gabe, StartDate: 2022-04-21, TopSetId: 80, ExerciseId: 3, Exercise: Deadlift, Repetitions: 10, Weight: 100kg\n",
|
|
"WorkoutId: 46, PersonId: 1 Person:Gabe, StartDate: 2022-04-26, TopSetId: 81, ExerciseId: 1, Exercise: Squat, Repetitions: 3, Weight: 80kg\n",
|
|
"WorkoutId: 47, PersonId: 1 Person:Gabe, StartDate: 2022-04-28, TopSetId: 82, ExerciseId: 2, Exercise: Bench, Repetitions: 2, Weight: 60kg\n",
|
|
"WorkoutId: 47, PersonId: 1 Person:Gabe, StartDate: 2022-04-28, TopSetId: 83, ExerciseId: 3, Exercise: Deadlift, Repetitions: 5, Weight: 100kg\n",
|
|
"WorkoutId: 48, PersonId: 1 Person:Gabe, StartDate: 2022-05-03, TopSetId: 84, ExerciseId: 2, Exercise: Bench, Repetitions: 4, Weight: 55kg\n",
|
|
"WorkoutId: 48, PersonId: 1 Person:Gabe, StartDate: 2022-05-03, TopSetId: 85, ExerciseId: 3, Exercise: Deadlift, Repetitions: 7, Weight: 95kg\n",
|
|
"WorkoutId: 49, PersonId: 1 Person:Gabe, StartDate: 2022-05-05, TopSetId: 86, ExerciseId: 2, Exercise: Bench, Repetitions: 4, Weight: 55kg\n",
|
|
"WorkoutId: 49, PersonId: 1 Person:Gabe, StartDate: 2022-05-05, TopSetId: 87, ExerciseId: 3, Exercise: Deadlift, Repetitions: 7, Weight: 110kg\n",
|
|
"WorkoutId: 50, PersonId: 1 Person:Gabe, StartDate: 2022-05-17, TopSetId: 88, ExerciseId: 1, Exercise: Squat, Repetitions: 3, Weight: 60kg\n",
|
|
"WorkoutId: 50, PersonId: 1 Person:Gabe, StartDate: 2022-05-17, TopSetId: 89, ExerciseId: 4, Exercise: Hotep, Repetitions: 4, Weight: 27kg\n",
|
|
"WorkoutId: 51, PersonId: 1 Person:Gabe, StartDate: 2022-05-19, TopSetId: 90, ExerciseId: 2, Exercise: Bench, Repetitions: 1, Weight: 65kg\n",
|
|
"WorkoutId: 51, PersonId: 1 Person:Gabe, StartDate: 2022-05-19, TopSetId: 91, ExerciseId: 3, Exercise: Deadlift, Repetitions: 4, Weight: 125kg\n",
|
|
"WorkoutId: 52, PersonId: 1 Person:Gabe, StartDate: 2022-06-07, TopSetId: 92, ExerciseId: 2, Exercise: Bench, Repetitions: 4, Weight: 55kg\n",
|
|
"WorkoutId: 52, PersonId: 1 Person:Gabe, StartDate: 2022-06-07, TopSetId: 93, ExerciseId: 3, Exercise: Deadlift, Repetitions: 5, Weight: 100kg\n",
|
|
"WorkoutId: 53, PersonId: 1 Person:Gabe, StartDate: 2022-06-14, TopSetId: 94, ExerciseId: 1, Exercise: Squat, Repetitions: 2, Weight: 75kg\n",
|
|
"WorkoutId: 53, PersonId: 1 Person:Gabe, StartDate: 2022-06-14, TopSetId: 95, ExerciseId: 4, Exercise: Hotep, Repetitions: 4, Weight: 31kg\n",
|
|
"WorkoutId: 54, PersonId: 1 Person:Gabe, StartDate: 2022-06-29, TopSetId: 96, ExerciseId: 2, Exercise: Bench, Repetitions: 11, Weight: 40kg\n",
|
|
"WorkoutId: 55, PersonId: 1 Person:Gabe, StartDate: 2022-07-07, TopSetId: 97, ExerciseId: 1, Exercise: Squat, Repetitions: 5, Weight: 65kg\n",
|
|
"WorkoutId: 55, PersonId: 1 Person:Gabe, StartDate: 2022-07-07, TopSetId: 98, ExerciseId: 4, Exercise: Hotep, Repetitions: 6, Weight: 30kg\n",
|
|
"WorkoutId: 56, PersonId: 1 Person:Gabe, StartDate: 2022-07-12, TopSetId: 99, ExerciseId: 2, Exercise: Bench, Repetitions: 4, Weight: 60kg\n",
|
|
"WorkoutId: 56, PersonId: 1 Person:Gabe, StartDate: 2022-07-12, TopSetId: 100, ExerciseId: 3, Exercise: Deadlift, Repetitions: 9, Weight: 100kg\n",
|
|
"WorkoutId: 57, PersonId: 1 Person:Gabe, StartDate: 2022-07-15, TopSetId: 101, ExerciseId: 1, Exercise: Squat, Repetitions: 6, Weight: 75kg\n",
|
|
"WorkoutId: 57, PersonId: 1 Person:Gabe, StartDate: 2022-07-15, TopSetId: 102, ExerciseId: 4, Exercise: Hotep, Repetitions: 3, Weight: 35kg\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"topsets = query_db(\"\"\"\n",
|
|
" SELECT \n",
|
|
" P.PersonId, \n",
|
|
" P.Name AS PersonName, \n",
|
|
" W.WorkoutId, \n",
|
|
" W.StartDate, \n",
|
|
" T.TopSetId, \n",
|
|
" E.ExerciseId, \n",
|
|
" E.Name AS ExerciseName, \n",
|
|
" T.Repetitions, \n",
|
|
" T.Weight\n",
|
|
" FROM Person P\n",
|
|
" LEFT JOIN Workout W ON P.PersonId=W.PersonId\n",
|
|
" LEFT JOIN TopSet T ON W.WorkoutId=T.WorkoutId\n",
|
|
" LEFT JOIN Exercise E ON T.ExerciseId=E.ExerciseId\n",
|
|
" WHERE P.PersonId=?\"\"\", [1])\n",
|
|
"\n",
|
|
"for topset in topsets:\n",
|
|
" print(f'WorkoutId: {topset[\"WorkoutId\"]}, PersonId: {topset[\"PersonId\"]} Person:{topset[\"PersonName\"]}, StartDate: {topset[\"StartDate\"]}, TopSetId: {topset[\"TopSetId\"]}, ExerciseId: {topset[\"ExerciseId\"]}, Exercise: {topset[\"ExerciseName\"]}, Repetitions: {topset[\"Repetitions\"]}, Weight: {topset[\"Weight\"]}kg')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Transform entity to view model with the following schema\n",
|
|
"<pre>\n",
|
|
"{ \"PersonId\": 1,\n",
|
|
" \"PersonName\": \"Gabe\", \n",
|
|
" \"Exercises\": [{\"ExerciseIs\": 1, \"ExerciseName\": \"Squat\"}, {\"ExerciseIs\": 2, \"ExerciseName\": \"Bench\"}] \n",
|
|
" \"Workouts\": [ \n",
|
|
" { \n",
|
|
" \"WorkoutId\": 1,\n",
|
|
" \"StartDate\": \"2022-06-29 00:00:00.000\", \n",
|
|
" \"TopSets\": [ \n",
|
|
" { \n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\", \n",
|
|
" \"Weight\": 80, \n",
|
|
" \"Repetitions\": 8 \n",
|
|
" }, \n",
|
|
" { \n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\", \n",
|
|
" \"Weight\": 60, \n",
|
|
" \"Repetitions\": 4 \n",
|
|
" } \n",
|
|
" ] \n",
|
|
" }, \n",
|
|
" {\n",
|
|
" \"WorkoutId\": 2,\n",
|
|
" \"StartDate\": \"2022-07-01 00:00:00.000\", \n",
|
|
" \"TopSets\": [ \n",
|
|
" { \n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\", \n",
|
|
" \"Weight\": 85, \n",
|
|
" \"Repetitions\": 4 \n",
|
|
" }, \n",
|
|
" { \n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\", \n",
|
|
" \"Weight\": 65, \n",
|
|
" \"Repetitions\": 5 \n",
|
|
" } \n",
|
|
" ] \n",
|
|
" } \n",
|
|
" ] \n",
|
|
"} \n",
|
|
"</pre>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### 1. Extract name from rows"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'Gabe'"
|
|
]
|
|
},
|
|
"execution_count": 37,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def get_name(topsets):\n",
|
|
" return topsets[0]['PersonName']\n",
|
|
"\n",
|
|
"get_name(topsets)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### 2. Group rows into workouts using WorkoutId column"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_workouts(topsets):\n",
|
|
" # Get all unique workout_ids (No duplicates)\n",
|
|
" workout_ids = set([t['WorkoutId'] for t in topsets])\n",
|
|
"\n",
|
|
" # Group topsets into workouts\n",
|
|
" workouts = []\n",
|
|
" for workout_id in workout_ids:\n",
|
|
" topsets_in_workout = [t for t in topsets if t['WorkoutId'] == workout_id]\n",
|
|
" workouts.append({\n",
|
|
" 'WorkoutId': workout_id,\n",
|
|
" 'StartDate': topsets_in_workout[0]['StartDate'],\n",
|
|
" 'TopSets': [{\"TopSetId\": t['TopSetId'], \"ExerciseId\": t['ExerciseId'], \"ExerciseName\": t['ExerciseName'], \"Weight\": t['Weight'], \"Repetitions\": t['Repetitions'] } for t in topsets_in_workout]\n",
|
|
" })\n",
|
|
" return workouts"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 35,\n",
|
|
" \"StartDate\": \"2022-01-13\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 61,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 36,\n",
|
|
" \"StartDate\": \"2022-01-18\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 62,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 63,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 37,\n",
|
|
" \"StartDate\": \"2022-02-08\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 64,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 65,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 38,\n",
|
|
" \"StartDate\": \"2022-02-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 66,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 67,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 39,\n",
|
|
" \"StartDate\": \"2022-02-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 68,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 69,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 105,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 40,\n",
|
|
" \"StartDate\": \"2022-03-01\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 70,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 71,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 41,\n",
|
|
" \"StartDate\": \"2022-03-10\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 72,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 42,\n",
|
|
" \"StartDate\": \"2022-03-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 73,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 74,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 43,\n",
|
|
" \"StartDate\": \"2022-03-22\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 75,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 76,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 44,\n",
|
|
" \"StartDate\": \"2022-04-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 77,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 78,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 45,\n",
|
|
" \"StartDate\": \"2022-04-21\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 79,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 80,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 46,\n",
|
|
" \"StartDate\": \"2022-04-26\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 81,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 47,\n",
|
|
" \"StartDate\": \"2022-04-28\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 82,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 83,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 48,\n",
|
|
" \"StartDate\": \"2022-05-03\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 84,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 85,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 49,\n",
|
|
" \"StartDate\": \"2022-05-05\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 86,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 87,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 50,\n",
|
|
" \"StartDate\": \"2022-05-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 88,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 89,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 27,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 51,\n",
|
|
" \"StartDate\": \"2022-05-19\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 90,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 91,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 125,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 52,\n",
|
|
" \"StartDate\": \"2022-06-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 92,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 93,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 53,\n",
|
|
" \"StartDate\": \"2022-06-14\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 94,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 95,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 31,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 54,\n",
|
|
" \"StartDate\": \"2022-06-29\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 96,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 40,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 55,\n",
|
|
" \"StartDate\": \"2022-07-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 97,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 98,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 56,\n",
|
|
" \"StartDate\": \"2022-07-12\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 99,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 100,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 9\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 57,\n",
|
|
" \"StartDate\": \"2022-07-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 101,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 102,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" }\n",
|
|
"]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(json.dumps(get_workouts(topsets), indent=2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'ExerciseId': 1, 'ExerciseName': 'Squat'},\n",
|
|
" {'ExerciseId': 2, 'ExerciseName': 'Bench'},\n",
|
|
" {'ExerciseId': 3, 'ExerciseName': 'Deadlift'},\n",
|
|
" {'ExerciseId': 4, 'ExerciseName': 'Hotep'}]"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def get_all_exercises_from_topsets(topsets):\n",
|
|
" exercise_ids = set([t['ExerciseId'] for t in topsets])\n",
|
|
" exercises = []\n",
|
|
" for exercise_id in exercise_ids:\n",
|
|
" exercises.append({\n",
|
|
" 'ExerciseId': exercise_id,\n",
|
|
" 'ExerciseName': next((t['ExerciseName'] for t in topsets if t['ExerciseId'] == exercise_id), 'Unknown')\n",
|
|
" })\n",
|
|
" return exercises\n",
|
|
"\n",
|
|
"get_all_exercises_from_topsets(topsets)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### 3. Compose functions together to acheive final model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def convert_to_view_model(topsets):\n",
|
|
" return {\n",
|
|
" 'PersonId': next((t['PersonId'] for t in topsets), -1),\n",
|
|
" 'PersonName': next((t['PersonName'] for t in topsets), -1),\n",
|
|
" 'Exercises': get_all_exercises_from_topsets(topsets),\n",
|
|
" 'Workouts': get_workouts(topsets)\n",
|
|
" }"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{\n",
|
|
" \"PersonId\": 1,\n",
|
|
" \"PersonName\": \"Gabe\",\n",
|
|
" \"Exercises\": [\n",
|
|
" {\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\"\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\"\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\"\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\"\n",
|
|
" }\n",
|
|
" ],\n",
|
|
" \"Workouts\": [\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 35,\n",
|
|
" \"StartDate\": \"2022-01-13\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 61,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 36,\n",
|
|
" \"StartDate\": \"2022-01-18\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 62,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 63,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 37,\n",
|
|
" \"StartDate\": \"2022-02-08\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 64,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 65,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 38,\n",
|
|
" \"StartDate\": \"2022-02-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 66,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 67,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 39,\n",
|
|
" \"StartDate\": \"2022-02-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 68,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 69,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 105,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 40,\n",
|
|
" \"StartDate\": \"2022-03-01\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 70,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 71,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 41,\n",
|
|
" \"StartDate\": \"2022-03-10\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 72,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 42,\n",
|
|
" \"StartDate\": \"2022-03-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 73,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 74,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 43,\n",
|
|
" \"StartDate\": \"2022-03-22\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 75,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 76,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 44,\n",
|
|
" \"StartDate\": \"2022-04-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 77,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 78,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 45,\n",
|
|
" \"StartDate\": \"2022-04-21\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 79,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 80,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 46,\n",
|
|
" \"StartDate\": \"2022-04-26\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 81,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 47,\n",
|
|
" \"StartDate\": \"2022-04-28\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 82,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 83,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 48,\n",
|
|
" \"StartDate\": \"2022-05-03\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 84,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 85,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 49,\n",
|
|
" \"StartDate\": \"2022-05-05\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 86,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 87,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 50,\n",
|
|
" \"StartDate\": \"2022-05-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 88,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 89,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 27,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 51,\n",
|
|
" \"StartDate\": \"2022-05-19\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 90,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 91,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 125,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 52,\n",
|
|
" \"StartDate\": \"2022-06-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 92,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 93,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 53,\n",
|
|
" \"StartDate\": \"2022-06-14\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 94,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 95,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 31,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 54,\n",
|
|
" \"StartDate\": \"2022-06-29\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 96,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 40,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 55,\n",
|
|
" \"StartDate\": \"2022-07-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 97,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 98,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 56,\n",
|
|
" \"StartDate\": \"2022-07-12\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 99,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 100,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 9\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 57,\n",
|
|
" \"StartDate\": \"2022-07-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 101,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 102,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" }\n",
|
|
" ]\n",
|
|
"}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(json.dumps(convert_to_view_model(topsets), indent=2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Dashboard page"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"all_topsets =query_db(\"\"\"\n",
|
|
" SELECT \n",
|
|
" P.PersonId, \n",
|
|
" P.Name AS PersonName, \n",
|
|
" W.WorkoutId, \n",
|
|
" W.StartDate, \n",
|
|
" T.TopSetId, \n",
|
|
" E.ExerciseId, \n",
|
|
" E.Name AS ExerciseName, \n",
|
|
" T.Repetitions, \n",
|
|
" T.Weight\n",
|
|
" FROM Person P\n",
|
|
" LEFT JOIN Workout W ON P.PersonId=W.PersonId\n",
|
|
" LEFT JOIN TopSet T ON W.WorkoutId=T.WorkoutId\n",
|
|
" LEFT JOIN Exercise E ON T.ExerciseId=E.ExerciseId\"\"\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_people(topsets):\n",
|
|
" # Get all unique workout_ids (No duplicates)\n",
|
|
" people_ids = set([t['PersonId'] for t in topsets])\n",
|
|
"\n",
|
|
" # Group topsets into workouts\n",
|
|
" people = []\n",
|
|
" for person_id in people_ids:\n",
|
|
" workouts_for_person = [t for t in topsets if t['PersonId'] == person_id]\n",
|
|
" people.append({\n",
|
|
" 'PersonId': person_id,\n",
|
|
" 'PersonName': workouts_for_person[0]['PersonName'],\n",
|
|
" 'Workouts': get_workouts(workouts_for_person)\n",
|
|
" })\n",
|
|
" return people"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[\n",
|
|
" {\n",
|
|
" \"PersonId\": 1,\n",
|
|
" \"PersonName\": \"Gabe\",\n",
|
|
" \"Workouts\": [\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 35,\n",
|
|
" \"StartDate\": \"2022-01-13\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 61,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 36,\n",
|
|
" \"StartDate\": \"2022-01-18\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 62,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 63,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 37,\n",
|
|
" \"StartDate\": \"2022-02-08\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 64,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 65,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 38,\n",
|
|
" \"StartDate\": \"2022-02-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 66,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 67,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 25,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 39,\n",
|
|
" \"StartDate\": \"2022-02-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 68,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 69,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 105,\n",
|
|
" \"Repetitions\": 8\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 40,\n",
|
|
" \"StartDate\": \"2022-03-01\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 70,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 71,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 41,\n",
|
|
" \"StartDate\": \"2022-03-10\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 72,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 42,\n",
|
|
" \"StartDate\": \"2022-03-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 73,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 74,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 43,\n",
|
|
" \"StartDate\": \"2022-03-22\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 75,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 76,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 44,\n",
|
|
" \"StartDate\": \"2022-04-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 77,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 78,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 45,\n",
|
|
" \"StartDate\": \"2022-04-21\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 79,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 80,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 46,\n",
|
|
" \"StartDate\": \"2022-04-26\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 81,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 47,\n",
|
|
" \"StartDate\": \"2022-04-28\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 82,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 83,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 48,\n",
|
|
" \"StartDate\": \"2022-05-03\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 84,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 85,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 95,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 49,\n",
|
|
" \"StartDate\": \"2022-05-05\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 86,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 87,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 110,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 50,\n",
|
|
" \"StartDate\": \"2022-05-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 88,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 89,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 27,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 51,\n",
|
|
" \"StartDate\": \"2022-05-19\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 90,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 91,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 125,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 52,\n",
|
|
" \"StartDate\": \"2022-06-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 92,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 93,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 53,\n",
|
|
" \"StartDate\": \"2022-06-14\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 94,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 95,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 31,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 54,\n",
|
|
" \"StartDate\": \"2022-06-29\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 96,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 40,\n",
|
|
" \"Repetitions\": 11\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 55,\n",
|
|
" \"StartDate\": \"2022-07-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 97,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 65,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 98,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 56,\n",
|
|
" \"StartDate\": \"2022-07-12\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 99,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 100,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 9\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 57,\n",
|
|
" \"StartDate\": \"2022-07-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 101,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 102,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"PersonId\": 2,\n",
|
|
" \"PersonName\": \"Michael\",\n",
|
|
" \"Workouts\": [\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 10,\n",
|
|
" \"StartDate\": \"2022-01-13\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 13,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 14,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 115,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 11,\n",
|
|
" \"StartDate\": \"2022-01-18\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 15,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 16,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 30,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 12,\n",
|
|
" \"StartDate\": \"2022-01-20\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 17,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 18,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 115,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 13,\n",
|
|
" \"StartDate\": \"2022-01-25\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 19,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 6,\n",
|
|
" \"Repetitions\": 65\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 20,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 35,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 15,\n",
|
|
" \"StartDate\": \"2022-01-27\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 21,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 22,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 125,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 16,\n",
|
|
" \"StartDate\": \"2022-02-01\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 23,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 24,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 40,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 17,\n",
|
|
" \"StartDate\": \"2022-02-03\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 25,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 26,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 135,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 18,\n",
|
|
" \"StartDate\": \"2022-02-08\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 27,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 28,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 19,\n",
|
|
" \"StartDate\": \"2022-02-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 29,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 30,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 20,\n",
|
|
" \"StartDate\": \"2022-02-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 31,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 32,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 150,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 21,\n",
|
|
" \"StartDate\": \"2022-03-01\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 33,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 75,\n",
|
|
" \"Repetitions\": 7\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 34,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 22,\n",
|
|
" \"StartDate\": \"2022-03-10\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 35,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 36,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 10\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 23,\n",
|
|
" \"StartDate\": \"2022-03-15\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 37,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 38,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 120,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 24,\n",
|
|
" \"StartDate\": \"2022-03-22\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 39,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 40,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 40,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 25,\n",
|
|
" \"StartDate\": \"2022-04-12\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 41,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 42,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 130,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 26,\n",
|
|
" \"StartDate\": \"2022-04-21\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 43,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 60,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 44,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 50,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 27,\n",
|
|
" \"StartDate\": \"2022-04-26\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 45,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 46,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 125,\n",
|
|
" \"Repetitions\": 1\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 28,\n",
|
|
" \"StartDate\": \"2022-04-28\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 47,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 48,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 42,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 29,\n",
|
|
" \"StartDate\": \"2022-05-03\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 49,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 47,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 50,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 130,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 30,\n",
|
|
" \"StartDate\": \"2022-05-05\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 51,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 80,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 52,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 44,\n",
|
|
" \"Repetitions\": 4\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 31,\n",
|
|
" \"StartDate\": \"2022-05-17\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 53,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 54,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 140,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 32,\n",
|
|
" \"StartDate\": \"2022-05-19\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 55,\n",
|
|
" \"ExerciseId\": 2,\n",
|
|
" \"ExerciseName\": \"Bench\",\n",
|
|
" \"Weight\": 55,\n",
|
|
" \"Repetitions\": 2\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 56,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 100,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 33,\n",
|
|
" \"StartDate\": \"2022-06-07\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 57,\n",
|
|
" \"ExerciseId\": 1,\n",
|
|
" \"ExerciseName\": \"Squat\",\n",
|
|
" \"Weight\": 85,\n",
|
|
" \"Repetitions\": 3\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 58,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"WorkoutId\": 34,\n",
|
|
" \"StartDate\": \"2022-06-14\",\n",
|
|
" \"TopSets\": [\n",
|
|
" {\n",
|
|
" \"TopSetId\": 59,\n",
|
|
" \"ExerciseId\": 3,\n",
|
|
" \"ExerciseName\": \"Deadlift\",\n",
|
|
" \"Weight\": 120,\n",
|
|
" \"Repetitions\": 6\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"TopSetId\": 60,\n",
|
|
" \"ExerciseId\": 4,\n",
|
|
" \"ExerciseName\": \"Hotep\",\n",
|
|
" \"Weight\": 45,\n",
|
|
" \"Repetitions\": 5\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" }\n",
|
|
" ]\n",
|
|
" }\n",
|
|
"]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(json.dumps(get_people(all_topsets), indent=2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"gabe_topsts = [t for t in topsets if t['PersonId'] == 1]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 63,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"gabe_exercises = get_all_exercises_from_topsets(gabe_topsts)\n",
|
|
"gabe_rep_maxes = []\n",
|
|
"for e in gabe_exercises:\n",
|
|
" exercise_topsets = [t for t in gabe_topsts if t['ExerciseId'] == e['ExerciseId']]\n",
|
|
" set_reps = set([t['Repetitions'] for t in exercise_topsets])\n",
|
|
"\n",
|
|
" topsets_for_exercise = []\n",
|
|
" for rep in set_reps:\n",
|
|
" reps = [t for t in exercise_topsets if t['Repetitions'] == rep]\n",
|
|
" max_weight = max([t['Weight'] for t in reps])\n",
|
|
" max_topset_for_rep = [t for t in reps if t['Weight'] == max_weight]\n",
|
|
" topsets_for_exercise.append({\n",
|
|
" 'StartDate': max_topset_for_rep[0]['StartDate'],\n",
|
|
" 'Repetitions': rep,\n",
|
|
" 'Weight': max_weight\n",
|
|
" })\n",
|
|
" \n",
|
|
" topsets_for_exercise.sort(key=lambda x: datetime.strptime(x['StartDate'],\"%Y-%m-%d\"))\n",
|
|
" \n",
|
|
" gabe_rep_maxes.append({\n",
|
|
" 'ExerciseId': e['ExerciseId'],\n",
|
|
" 'ExerciseName': e['ExerciseName'],\n",
|
|
" 'RepMaxes': topsets_for_exercise,\n",
|
|
" })"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 65,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_rep_maxes_for_person(person_topsets):\n",
|
|
" person_exercises = get_all_exercises_from_topsets(person_topsets)\n",
|
|
"\n",
|
|
" rep_maxes_in_exercises = []\n",
|
|
" for e in person_exercises:\n",
|
|
" exercise_topsets = [\n",
|
|
" t for t in person_topsets if t['ExerciseId'] == e['ExerciseId']]\n",
|
|
" set_reps = set([t['Repetitions'] for t in exercise_topsets])\n",
|
|
"\n",
|
|
" topsets_for_exercise = []\n",
|
|
" for rep in set_reps:\n",
|
|
" reps = [t for t in exercise_topsets if t['Repetitions'] == rep]\n",
|
|
" max_weight = max([t['Weight'] for t in reps])\n",
|
|
" max_topset_for_rep = [t for t in reps if t['Weight'] == max_weight]\n",
|
|
" topsets_for_exercise.append({\n",
|
|
" 'StartDate': max_topset_for_rep[0]['StartDate'],\n",
|
|
" 'Repetitions': rep,\n",
|
|
" 'Weight': max_weight\n",
|
|
" })\n",
|
|
"\n",
|
|
" topsets_for_exercise.sort(\n",
|
|
" key=lambda x: datetime.strptime(x['StartDate'], \"%Y-%m-%d\"))\n",
|
|
"\n",
|
|
" rep_maxes_in_exercises.append({\n",
|
|
" 'ExerciseId': e['ExerciseId'],\n",
|
|
" 'ExerciseName': e['ExerciseName'],\n",
|
|
" 'RepMaxes': topsets_for_exercise,\n",
|
|
" })\n",
|
|
" return rep_maxes_in_exercises\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 66,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'ExerciseId': 1,\n",
|
|
" 'ExerciseName': 'Squat',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-18', 'Repetitions': 7, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-03-15', 'Repetitions': 5, 'Weight': 75},\n",
|
|
" {'StartDate': '2022-04-07', 'Repetitions': 6, 'Weight': 75},\n",
|
|
" {'StartDate': '2022-04-26', 'Repetitions': 3, 'Weight': 80},\n",
|
|
" {'StartDate': '2022-06-14', 'Repetitions': 2, 'Weight': 75}]},\n",
|
|
" {'ExerciseId': 2,\n",
|
|
" 'ExerciseName': 'Bench',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-13', 'Repetitions': 8, 'Weight': 50},\n",
|
|
" {'StartDate': '2022-02-08', 'Repetitions': 5, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 2, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-03-10', 'Repetitions': 11, 'Weight': 50},\n",
|
|
" {'StartDate': '2022-03-22', 'Repetitions': 4, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-04-21', 'Repetitions': 10, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-05-19', 'Repetitions': 1, 'Weight': 65}]},\n",
|
|
" {'ExerciseId': 3,\n",
|
|
" 'ExerciseName': 'Deadlift',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-02-08', 'Repetitions': 6, 'Weight': 95},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 8, 'Weight': 105},\n",
|
|
" {'StartDate': '2022-04-21', 'Repetitions': 10, 'Weight': 100},\n",
|
|
" {'StartDate': '2022-04-28', 'Repetitions': 5, 'Weight': 100},\n",
|
|
" {'StartDate': '2022-05-05', 'Repetitions': 7, 'Weight': 110},\n",
|
|
" {'StartDate': '2022-05-19', 'Repetitions': 4, 'Weight': 125},\n",
|
|
" {'StartDate': '2022-07-12', 'Repetitions': 9, 'Weight': 100}]},\n",
|
|
" {'ExerciseId': 4,\n",
|
|
" 'ExerciseName': 'Hotep',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-03-15', 'Repetitions': 5, 'Weight': 30},\n",
|
|
" {'StartDate': '2022-04-07', 'Repetitions': 2, 'Weight': 35},\n",
|
|
" {'StartDate': '2022-06-14', 'Repetitions': 4, 'Weight': 31},\n",
|
|
" {'StartDate': '2022-07-07', 'Repetitions': 6, 'Weight': 30},\n",
|
|
" {'StartDate': '2022-07-15', 'Repetitions': 3, 'Weight': 35}]}]"
|
|
]
|
|
},
|
|
"execution_count": 66,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"get_rep_maxes_for_person(gabe_topsts)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 67,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_people_and_exercise_rep_maxes(topsets):\n",
|
|
" # Get all unique workout_ids (No duplicates)\n",
|
|
" people_ids = set([t['PersonId'] for t in topsets])\n",
|
|
"\n",
|
|
" # Group topsets into workouts\n",
|
|
" people = []\n",
|
|
" for person_id in people_ids:\n",
|
|
" workouts_for_person = [t for t in topsets if t['PersonId'] == person_id]\n",
|
|
" people.append({\n",
|
|
" 'PersonId': person_id,\n",
|
|
" 'PersonName': workouts_for_person[0]['PersonName'],\n",
|
|
" 'Exercises': get_rep_maxes_for_person(workouts_for_person)\n",
|
|
" })\n",
|
|
" return people"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 69,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'PersonId': 1,\n",
|
|
" 'PersonName': 'Gabe',\n",
|
|
" 'Exercises': [{'ExerciseId': 1,\n",
|
|
" 'ExerciseName': 'Squat',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-18', 'Repetitions': 7, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-03-15', 'Repetitions': 5, 'Weight': 75},\n",
|
|
" {'StartDate': '2022-04-07', 'Repetitions': 6, 'Weight': 75},\n",
|
|
" {'StartDate': '2022-04-26', 'Repetitions': 3, 'Weight': 80},\n",
|
|
" {'StartDate': '2022-06-14', 'Repetitions': 2, 'Weight': 75}]},\n",
|
|
" {'ExerciseId': 2,\n",
|
|
" 'ExerciseName': 'Bench',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-13', 'Repetitions': 8, 'Weight': 50},\n",
|
|
" {'StartDate': '2022-02-08', 'Repetitions': 5, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 2, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-03-10', 'Repetitions': 11, 'Weight': 50},\n",
|
|
" {'StartDate': '2022-03-22', 'Repetitions': 4, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-04-21', 'Repetitions': 10, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-05-19', 'Repetitions': 1, 'Weight': 65}]},\n",
|
|
" {'ExerciseId': 3,\n",
|
|
" 'ExerciseName': 'Deadlift',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-02-08', 'Repetitions': 6, 'Weight': 95},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 8, 'Weight': 105},\n",
|
|
" {'StartDate': '2022-04-21', 'Repetitions': 10, 'Weight': 100},\n",
|
|
" {'StartDate': '2022-04-28', 'Repetitions': 5, 'Weight': 100},\n",
|
|
" {'StartDate': '2022-05-05', 'Repetitions': 7, 'Weight': 110},\n",
|
|
" {'StartDate': '2022-05-19', 'Repetitions': 4, 'Weight': 125},\n",
|
|
" {'StartDate': '2022-07-12', 'Repetitions': 9, 'Weight': 100}]},\n",
|
|
" {'ExerciseId': 4,\n",
|
|
" 'ExerciseName': 'Hotep',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-03-15', 'Repetitions': 5, 'Weight': 30},\n",
|
|
" {'StartDate': '2022-04-07', 'Repetitions': 2, 'Weight': 35},\n",
|
|
" {'StartDate': '2022-06-14', 'Repetitions': 4, 'Weight': 31},\n",
|
|
" {'StartDate': '2022-07-07', 'Repetitions': 6, 'Weight': 30},\n",
|
|
" {'StartDate': '2022-07-15', 'Repetitions': 3, 'Weight': 35}]}]},\n",
|
|
" {'PersonId': 2,\n",
|
|
" 'PersonName': 'Michael',\n",
|
|
" 'Exercises': [{'ExerciseId': 1,\n",
|
|
" 'ExerciseName': 'Squat',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-18', 'Repetitions': 10, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-01-25', 'Repetitions': 65, 'Weight': 6},\n",
|
|
" {'StartDate': '2022-02-08', 'Repetitions': 2, 'Weight': 80},\n",
|
|
" {'StartDate': '2022-02-15', 'Repetitions': 5, 'Weight': 80},\n",
|
|
" {'StartDate': '2022-03-01', 'Repetitions': 7, 'Weight': 75},\n",
|
|
" {'StartDate': '2022-04-21', 'Repetitions': 4, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-06-07', 'Repetitions': 3, 'Weight': 85}]},\n",
|
|
" {'ExerciseId': 2,\n",
|
|
" 'ExerciseName': 'Bench',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-13', 'Repetitions': 7, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-02-03', 'Repetitions': 2, 'Weight': 55},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 1, 'Weight': 60},\n",
|
|
" {'StartDate': '2022-03-10', 'Repetitions': 10, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-03-22', 'Repetitions': 5, 'Weight': 40},\n",
|
|
" {'StartDate': '2022-05-17', 'Repetitions': 3, 'Weight': 55}]},\n",
|
|
" {'ExerciseId': 3,\n",
|
|
" 'ExerciseName': 'Deadlift',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-20', 'Repetitions': 10, 'Weight': 115},\n",
|
|
" {'StartDate': '2022-01-27', 'Repetitions': 5, 'Weight': 125},\n",
|
|
" {'StartDate': '2022-02-03', 'Repetitions': 3, 'Weight': 135},\n",
|
|
" {'StartDate': '2022-02-17', 'Repetitions': 2, 'Weight': 150},\n",
|
|
" {'StartDate': '2022-04-12', 'Repetitions': 1, 'Weight': 130},\n",
|
|
" {'StartDate': '2022-06-14', 'Repetitions': 6, 'Weight': 120}]},\n",
|
|
" {'ExerciseId': 4,\n",
|
|
" 'ExerciseName': 'Hotep',\n",
|
|
" 'RepMaxes': [{'StartDate': '2022-01-18', 'Repetitions': 10, 'Weight': 30},\n",
|
|
" {'StartDate': '2022-01-25', 'Repetitions': 7, 'Weight': 35},\n",
|
|
" {'StartDate': '2022-02-15', 'Repetitions': 3, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-03-01', 'Repetitions': 4, 'Weight': 45},\n",
|
|
" {'StartDate': '2022-04-28', 'Repetitions': 2, 'Weight': 42},\n",
|
|
" {'StartDate': '2022-06-07', 'Repetitions': 5, 'Weight': 45}]}]}]"
|
|
]
|
|
},
|
|
"execution_count": 69,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"get_people_and_exercise_rep_maxes(all_topsets)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3.9.6 64-bit",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.9.6"
|
|
},
|
|
"orig_nbformat": 4,
|
|
"vscode": {
|
|
"interpreter": {
|
|
"hash": "63076e477759601ac1c90dd52b6ecb6aedfcfea91f89ed7c8d6b0b077f7912d7"
|
|
}
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|