Workouts now directly store their set groups.

Commit
d5bd177b8b3ea373991cfb6f1538d14d06fe8f96
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker/MFTSQLite3Database.class.st
index d8b8ad63..f23779f9 100644..100644
@@ -117,16 +117,25 @@
117 117 { #category : #accessing }
118 118 MFTSQLite3Database class >> getAllWorkoutsForUser: aMFTUser connection: openConnection [
119 119
120 Removed: | allWorkoutRows workouts sets |
120 Added: | allWorkoutRows workouts allSets |
121 121 allWorkoutRows := (openConnection
122 122 execute:
123 123 'SELECT * FROM Workouts WHERE user_id = ?'
124 124 value: aMFTUser id) rows.
125 Removed: sets := self getAllSetsForUser: aMFTUser connection: openConnection.
125 Added: allSets := self
126 Added: getAllSetsForUser: aMFTUser
127 Added: connection: openConnection.
128 Added:
126 129 workouts := allWorkoutRows collect: [ :row |
127 130 MFTWorkout newFromDictionary: row asDictionary ].
128 Removed: workouts do: [ :workout |
129 Removed: workout sets: (sets select: [ :set | set workoutId = workout id ]) ].
131 Added: (allSets groupedBy: #workoutId) keysAndAllValuesDo: [
132 Added: :workoutId
133 Added: :workoutSets |
134 Added: | workout |
135 Added: workout := workouts detect: [ :w | w id = workoutId ].
136 Added: (workoutSets groupedBy: #groupId) keysAndAllValuesDo: [ :groupId :sets |
137 Added: workout addSetGroup: (MFTSetGroup id: groupId sets: sets) ] ].
138 Added:
130 139 ^ workouts
131 140 ]
132 141
src/MyFitnessTracker/MFTSet.class.st
index 205c000d..2990905c 100644..100644
@@ -6,7 +6,7 @@
6 6 'workoutId',
7 7 'exerciseId',
8 8 'number',
9 Removed: 'group',
9 Added: 'groupId',
10 10 'reps',
11 11 'load',
12 12 'rpe',
@@ -35,7 +35,7 @@
35 35 workoutId: (aDictionary at: 'workout_id');
36 36 exerciseId: (aDictionary at: 'exercise_id');
37 37 number: (aDictionary at: 'set_number');
38 Removed: group: (aDictionary at: 'set_group');
38 Added: groupId: (aDictionary at: 'set_group');
39 39 reps: (aDictionary at: 'reps');
40 40 rpe: (aDictionary at: 'rpe');
41 41 restAfter: (aDictionary at: 'rest_after');
@@ -51,7 +51,7 @@
51 51 id: 1;
52 52 workoutId: 1;
53 53 exerciseId: 2;
54 Removed: group: 1;
54 Added: groupId: 1;
55 55 number: 1;
56 56 reps: 8;
57 57 load: 20;
@@ -60,7 +60,7 @@
60 60 id: 2;
61 61 workoutId: 1;
62 62 exerciseId: 2;
63 Removed: group: 1;
63 Added: groupId: 1;
64 64 number: 2;
65 65 reps: 8;
66 66 load: 25;
@@ -69,7 +69,7 @@
69 69 id: 3;
70 70 workoutId: 1;
71 71 exerciseId: 2;
72 Removed: group: 1;
72 Added: groupId: 1;
73 73 number: 3;
74 74 reps: 8;
75 75 load: 30;
@@ -79,7 +79,7 @@
79 79 id: 4;
80 80 workoutId: 2;
81 81 exerciseId: 3;
82 Removed: group: 1;
82 Added: groupId: 1;
83 83 number: 1;
84 84 reps: 50;
85 85 load: 15;
@@ -88,7 +88,7 @@
88 88 id: 5;
89 89 workoutId: 2;
90 90 exerciseId: 4;
91 Removed: group: 2;
91 Added: groupId: 2;
92 92 number: 2;
93 93 reps: 8;
94 94 load: 25;
@@ -97,7 +97,7 @@
97 97 id: 6;
98 98 workoutId: 2;
99 99 exerciseId: 4;
100 Removed: group: 2;
100 Added: groupId: 2;
101 101 number: 3;
102 102 reps: 8;
103 103 load: 30;
@@ -107,7 +107,7 @@
107 107 id: 7;
108 108 workoutId: 3;
109 109 exerciseId: 10;
110 Removed: group: 1;
110 Added: groupId: 1;
111 111 number: 1;
112 112 reps: 5;
113 113 load: 100;
@@ -116,7 +116,7 @@
116 116 id: 8;
117 117 workoutId: 3;
118 118 exerciseId: 11;
119 Removed: group: 1;
119 Added: groupId: 1;
120 120 number: 2;
121 121 reps: 5;
122 122 load: 100;
@@ -125,16 +125,16 @@
125 125 id: 9;
126 126 workoutId: 3;
127 127 exerciseId: 12;
128 Removed: group: 2;
128 Added: groupId: 2;
129 129 number: 3;
130 130 reps: 5;
131 131 load: 100;
132 132 rpe: 10) }.
133 133
134 Removed: ^ {
135 Removed: forWorkout1.
136 Removed: forWorkout2.
137 Removed: forWorkout3 } flattened
134 Added: ^ OrderedCollection withAll: {
135 Added: forWorkout1.
136 Added: forWorkout2.
137 Added: forWorkout3 } flattened
138 138 ]
139 139
140 140 { #category : #accessing }
@@ -204,15 +204,15 @@
204 204 ]
205 205
206 206 { #category : #accessing }
207 Removed: MFTSet >> group [
207 Added: MFTSet >> groupId [
208 208
209 Removed: ^ group
209 Added: ^ groupId
210 210 ]
211 211
212 212 { #category : #accessing }
213 Removed: MFTSet >> group: anInteger [
213 Added: MFTSet >> groupId: anInteger [
214 214
215 Removed: group := anInteger
215 Added: groupId := anInteger
216 216 ]
217 217
218 218 { #category : #testing }
src/MyFitnessTracker/MFTSetGroup.class.st
index cf43792a..1b9bf64f 100644..100644
@@ -61,9 +61,9 @@
61 61 ]
62 62
63 63 { #category : #accessing }
64 Removed: MFTSetGroup >> sets: anObject [
64 Added: MFTSetGroup >> sets: aMFTSetCollection [
65 65
66 Removed: sets := anObject
66 Added: sets := aMFTSetCollection
67 67 ]
68 68
69 69 { #category : #initialization }
src/MyFitnessTracker/MFTWorkout.class.st
index fcfe089a..08ddd887 100644..100644
@@ -7,7 +7,7 @@
7 7 'date',
8 8 'primaryMuscleGroupId',
9 9 'secondaryMuscleGroupIds',
10 Removed: 'sets'
10 Added: 'setGroups'
11 11 ],
12 12 #category : #'MyFitnessTracker-Model'
13 13 }
@@ -55,16 +55,22 @@
55 55 workout3 }
56 56 ]
57 57
58 Added: { #category : #adding }
59 Added: MFTWorkout >> addSetGroup: aMFTSetGroup [
60 Added:
61 Added: setGroups add: aMFTSetGroup
62 Added: ]
63 Added:
58 64 { #category : #'as yet unclassified' }
59 65 MFTWorkout >> anySetHasLoad [
60 66
61 Removed: ^ sets anySatisfy: #hasLoad
67 Added: ^ self sets anySatisfy: #hasLoad
62 68 ]
63 69
64 70 { #category : #'as yet unclassified' }
65 71 MFTWorkout >> anySetHasVolume [
66 72
67 Removed: ^ sets anySatisfy: #hasVolume
73 Added: ^ self sets anySatisfy: #hasVolume
68 74 ]
69 75
70 76 { #category : #accessing }
@@ -105,7 +111,7 @@
105 111
106 112 super initialize.
107 113 date := Date today.
108 Removed: sets := OrderedCollection new.
114 Added: setGroups := OrderedCollection new.
109 115 secondaryMuscleGroupIds := OrderedCollection new
110 116 ]
111 117
@@ -130,40 +136,6 @@
130 136 ]
131 137
132 138 { #category : #rendering }
133 Removed: MFTWorkout >> renderAllSetsTableOn: html [
134 Removed:
135 Removed: | renderLoad renderVolume |
136 Removed: "We avoid recalculating these render predicates in the main loop below."
137 Removed: renderLoad := self anySetHasLoad.
138 Removed: renderVolume := self anySetHasVolume.
139 Removed:
140 Removed: html table
141 Removed: class: 'table table-striped table-bordered';
142 Removed: with: [
143 Removed: self renderSetsTableHeaderOn: html.
144 Removed: sets do: [ :set |
145 Removed: html tableRow: [
146 Removed: html tableData
147 Removed: style: 'text-align: right';
148 Removed: with: ('n{1} g{2}' format: {
149 Removed: set number.
150 Removed: set group }).
151 Removed: html tableData: set exercise englishName capitalized.
152 Removed: html tableData
153 Removed: style: 'text-align: right';
154 Removed: with: set reps.
155 Removed: renderLoad ifTrue: [
156 Removed: html tableData
157 Removed: style: 'text-align: right';
158 Removed: with: set load ].
159 Removed: renderVolume ifTrue: [
160 Removed: html tableData
161 Removed: style: 'text-align: right';
162 Removed: with: set volume ] ] ].
163 Removed: self renderSetsTableFooterOn: html ]
164 Removed: ]
165 Removed:
166 Removed: { #category : #rendering }
167 139 MFTWorkout >> renderContentOn: html [
168 140
169 141 html definitionList: [
@@ -179,11 +151,11 @@
179 151 definitionTerm: 'Secondary Muscle Group';
180 152 definitionData:
181 153 (self secondaryMuscleGroups collect: #englishName) asCommaString ] ].
182 Removed: sets ifNotEmpty: [ self renderGroupedSetsTableOn: html ]
154 Added: setGroups ifNotEmpty: [ self renderSetGroupsTableOn: html ]
183 155 ]
184 156
185 157 { #category : #rendering }
186 Removed: MFTWorkout >> renderGroupedSetsTableOn: html [
158 Added: MFTWorkout >> renderSetGroupsTableOn: html [
187 159
188 160 | renderLoad renderVolume |
189 161 renderLoad := self anySetHasLoad.
@@ -220,8 +192,8 @@
220 192 MFTWorkout >> renderSetsTableFooterOn: html [
221 193
222 194 | totalReps totalVolume |
223 Removed: totalReps := (sets collect: #reps) sum.
224 Removed: totalVolume := (sets collect: #volume) sum.
195 Added: totalReps := (self sets collect: #reps) sum.
196 Added: totalVolume := (self sets collect: #volume) sum.
225 197 html tableFoot: [
226 198 html tableData.
227 199 html tableData: 'Total'.
@@ -276,23 +248,30 @@
276 248 { #category : #accessing }
277 249 MFTWorkout >> setGroups [
278 250
279 Removed: | setGroups |
280 Removed: setGroups := OrderedCollection new.
281 Removed: (sets groupedBy: #group) keysAndValuesDo: [ :groupId :group |
282 Removed: setGroups add: (MFTSetGroup id: groupId sets: group) ].
283 251 ^ setGroups
284 252 ]
285 253
286 254 { #category : #accessing }
255 Added: MFTWorkout >> setGroups: aMFTSetGroupCollection [
256 Added:
257 Added: setGroups := aMFTSetGroupCollection
258 Added: ]
259 Added:
260 Added: { #category : #accessing }
287 261 MFTWorkout >> sets [
288 262
289 Removed: ^ sets
263 Added: ^ setGroups flatCollect: #sets
290 264 ]
291 265
292 266 { #category : #accessing }
293 267 MFTWorkout >> sets: aMFTSetCollection [
294 268
295 Removed: sets := aMFTSetCollection
269 Added: | groups |
270 Added: groups := OrderedCollection new.
271 Added: (aMFTSetCollection groupedBy: #groupId) keysAndValuesDo: [
272 Added: :groupId
273 Added: :sets | groups add: (MFTSetGroup id: groupId sets: sets) ].
274 Added: self setGroups: groups
296 275 ]
297 276
298 277 { #category : #accessing }
@@ -310,5 +289,5 @@
310 289 { #category : #'as yet unclassified' }
311 290 MFTWorkout >> volume [
312 291
313 Removed: ^ (sets collect: #volume) sum
292 Added: ^ (setGroups collect: #volume) sum
314 293 ]