Update core domain objects.

Commit
1d40c5c5254e994825cb880a57cf5714224d78fb
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker-Core/MFTExercise.class.st
index eda631d3..36417b50 100644..100644
@@ -182,6 +182,12 @@
182 182 ]
183 183
184 184 { #category : 'accessing' }
185 Added: MFTExercise >> canonicalName [
186 Added:
187 Added: ^ englishName
188 Added: ]
189 Added:
190 Added: { #category : 'accessing' }
185 191 MFTExercise >> englishName [
186 192
187 193 ^ englishName
@@ -209,26 +215,31 @@
209 215 MFTExercise >> initialize [
210 216
211 217 super initialize.
212 Removed: primaryMuscleGroupId := Integer new.
218 Added: primaryMuscle := MFTMuscleGroup new.
213 219 englishName := String new.
214 220 frenchName := String new
215 221 ]
216 222
217 223 { #category : 'accessing' }
218 Removed: MFTExercise >> primaryMuscleGroup [
224 Added: MFTExercise >> primaryMuscle [
219 225
220 Removed: ^ MFTSQLite3Database allMuscleGroups detect: [ :group |
221 Removed: group id = primaryMuscleGroupId ]
226 Added: ^ primaryMuscle
222 227 ]
223 228
224 229 { #category : 'accessing' }
225 Removed: MFTExercise >> primaryMuscleGroupId [
230 Added: MFTExercise >> primaryMuscle: aMFTMuscle [
226 231
227 Removed: ^ primaryMuscleGroupId
232 Added: primaryMuscle := aMFTMuscle
228 233 ]
229 234
230 235 { #category : 'accessing' }
231 Removed: MFTExercise >> primaryMuscleGroupId: anObject [
236 Added: MFTExercise >> secondaryMuscles [
232 237
233 Removed: primaryMuscleGroupId := anObject
238 Added: ^ secondaryMuscles
239 Added: ]
240 Added:
241 Added: { #category : 'accessing' }
242 Added: MFTExercise >> secondaryMuscles: anObject [
243 Added:
244 Added: secondaryMuscles := anObject
234 245 ]
src/MyFitnessTracker-Core/MFTMuscle.class.st
index 962bed7a..c2fc830b 100644..100644
@@ -7,8 +7,8 @@
7 7 #instVars : [
8 8 'latinName',
9 9 'englishName',
10 Removed: 'function',
11 Removed: 'primaryMuscleGroup'
10 Added: 'primaryMuscleGroup',
11 Added: 'description'
12 12 ],
13 13 #category : 'MyFitnessTracker-Core',
14 14 #package : 'MyFitnessTracker-Core'
@@ -294,38 +294,44 @@
294 294 yourself
295 295 ]
296 296
297 Removed: { #category : 'as yet unclassified' }
298 Removed: MFTMuscle >> englishName [
297 Added: { #category : 'accessing' }
298 Added: MFTMuscle >> canonicalName [
299 299
300 300 ^ englishName
301 301 ]
302 302
303 Removed: { #category : 'as yet unclassified' }
304 Removed: MFTMuscle >> englishName: aString [
303 Added: { #category : 'accessing' }
304 Added: MFTMuscle >> description [
305 305
306 Removed: englishName := aString
306 Added: ^ description
307 307 ]
308 308
309 Added: { #category : 'accessing' }
310 Added: MFTMuscle >> description: anObject [
311 Added:
312 Added: description := anObject
313 Added: ]
314 Added:
309 315 { #category : 'as yet unclassified' }
310 Removed: MFTMuscle >> function [
316 Added: MFTMuscle >> englishName [
311 317
312 Removed: ^ function
318 Added: ^ englishName
313 319 ]
314 320
315 321 { #category : 'as yet unclassified' }
316 Removed: MFTMuscle >> function: aString [
322 Added: MFTMuscle >> englishName: aString [
317 323
318 Removed: function := aString
324 Added: englishName := aString
319 325 ]
320 326
321 327 { #category : 'initialization' }
322 328 MFTMuscle >> initialize [
323 329
324 330 super initialize.
325 Removed: primaryMuscleGroupId := Integer new.
331 Added: primaryMuscleGroup := MFTMuscleGroup new.
326 332 latinName := String new.
327 333 englishName := String new.
328 Removed: function := String new
334 Added: description := String new
329 335 ]
330 336
331 337 { #category : 'as yet unclassified' }
@@ -347,14 +353,14 @@
347 353 format: { latinName }
348 354 ]
349 355
350 Removed: { #category : 'as yet unclassified' }
351 Removed: MFTMuscle >> primaryMuscleGroupId [
356 Added: { #category : 'accessing' }
357 Added: MFTMuscle >> primaryMuscleGroup [
352 358
353 Removed: ^ primaryMuscleGroupId
359 Added: ^ primaryMuscleGroup
354 360 ]
355 361
356 Removed: { #category : 'as yet unclassified' }
357 Removed: MFTMuscle >> primaryMuscleGroupId: anObject [
362 Added: { #category : 'accessing' }
363 Added: MFTMuscle >> primaryMuscleGroup: aMFTMuscleGroup [
358 364
359 Removed: primaryMuscleGroupId := anObject
365 Added: primaryMuscleGroup := aMFTMuscleGroup
360 366 ]
src/MyFitnessTracker-Core/MFTMuscleGroup.class.st
index 4f07ac30..4c30383b 100644..100644
@@ -7,8 +7,8 @@
7 7 #instVars : [
8 8 'englishName',
9 9 'frenchName',
10 Removed: 'function',
11 Removed: 'muscles'
10 Added: 'muscles',
11 Added: 'description'
12 12 ],
13 13 #category : 'MyFitnessTracker-Core',
14 14 #package : 'MyFitnessTracker-Core'
@@ -85,7 +85,7 @@
85 85 ]
86 86
87 87 { #category : 'instance creation' }
88 Removed: MFTMuscleGroup class >> hip [
88 Added: MFTMuscleGroup class >> hips [
89 89
90 90 ^ self newWithEnglishName
91 91 muscles: {
@@ -96,7 +96,7 @@
96 96 ]
97 97
98 98 { #category : 'instance creation' }
99 Removed: MFTMuscleGroup class >> leg [
99 Added: MFTMuscleGroup class >> legs [
100 100
101 101 ^ self newWithEnglishName
102 102 muscles: {
@@ -126,6 +126,24 @@
126 126 yourself
127 127 ]
128 128
129 Added: { #category : 'accessing' }
130 Added: MFTMuscleGroup >> canonicalName [
131 Added:
132 Added: ^ englishName
133 Added: ]
134 Added:
135 Added: { #category : 'accessing' }
136 Added: MFTMuscleGroup >> description [
137 Added:
138 Added: ^ description
139 Added: ]
140 Added:
141 Added: { #category : 'accessing' }
142 Added: MFTMuscleGroup >> description: aString [
143 Added:
144 Added: description := aString
145 Added: ]
146 Added:
129 147 { #category : 'as yet unclassified' }
130 148 MFTMuscleGroup >> englishName [
131 149
@@ -150,25 +168,13 @@
150 168 frenchName := anObject
151 169 ]
152 170
153 Removed: { #category : 'as yet unclassified' }
154 Removed: MFTMuscleGroup >> function [
155 Removed:
156 Removed: ^ function
157 Removed: ]
158 Removed:
159 Removed: { #category : 'as yet unclassified' }
160 Removed: MFTMuscleGroup >> function: anObject [
161 Removed:
162 Removed: function := anObject
163 Removed: ]
164 Removed:
165 171 { #category : 'initialization' }
166 172 MFTMuscleGroup >> initialize [
167 173
168 174 super initialize.
169 175 englishName := String new.
170 176 frenchName := String new.
171 Removed: function := String new.
177 Added: description := String new.
172 178 muscles := OrderedCollection new
173 179 ]
174 180
src/MyFitnessTracker-Core/MFTSet.class.st
index a0076c14..2a3da590 100644..100644
@@ -1,230 +1,34 @@
1 1 "
2 Removed: I represent a workout set.
2 Added: I represent a working set within a workout.
3 3 "
4 4 Class {
5 5 #name : 'MFTSet',
6 6 #superclass : 'MFTObject',
7 7 #instVars : [
8 Removed: 'workoutId',
9 Removed: 'exerciseId',
10 Removed: 'number',
11 Removed: 'groupId',
12 8 'reps',
13 9 'load',
14 10 'rpe',
15 Removed: 'restAfter'
11 Added: 'restAfter',
12 Added: 'workout',
13 Added: 'exercise',
14 Added: 'setGroup'
16 15 ],
17 16 #category : 'MyFitnessTracker-Core',
18 17 #package : 'MyFitnessTracker-Core'
19 18 }
20 19
21 Removed: { #category : 'as yet unclassified' }
22 Removed: MFTSet class >> placeholderCollection [
23 Removed:
24 Removed: | forWorkout1 forWorkout2 forWorkout3 |
25 Removed: forWorkout1 := {
26 Removed: (self new
27 Removed: id: 1;
28 Removed: workoutId: 1;
29 Removed: exerciseId: 2;
30 Removed: groupId: 1;
31 Removed: number: 1;
32 Removed: reps: 8;
33 Removed: load: 20;
34 Removed: rpe: 8).
35 Removed: (self new
36 Removed: id: 2;
37 Removed: workoutId: 1;
38 Removed: exerciseId: 2;
39 Removed: groupId: 1;
40 Removed: number: 2;
41 Removed: reps: 8;
42 Removed: load: 25;
43 Removed: rpe: 9).
44 Removed: (self new
45 Removed: id: 3;
46 Removed: workoutId: 1;
47 Removed: exerciseId: 2;
48 Removed: groupId: 1;
49 Removed: number: 3;
50 Removed: reps: 8;
51 Removed: load: 30;
52 Removed: rpe: 10) }.
53 Removed: forWorkout2 := {
54 Removed: (self new
55 Removed: id: 4;
56 Removed: workoutId: 2;
57 Removed: exerciseId: 3;
58 Removed: groupId: 1;
59 Removed: number: 1;
60 Removed: reps: 50;
61 Removed: load: 15;
62 Removed: rpe: 4).
63 Removed: (self new
64 Removed: id: 5;
65 Removed: workoutId: 2;
66 Removed: exerciseId: 4;
67 Removed: groupId: 2;
68 Removed: number: 2;
69 Removed: reps: 8;
70 Removed: load: 25;
71 Removed: rpe: 6).
72 Removed: (self new
73 Removed: id: 6;
74 Removed: workoutId: 2;
75 Removed: exerciseId: 4;
76 Removed: groupId: 2;
77 Removed: number: 3;
78 Removed: reps: 8;
79 Removed: load: 30;
80 Removed: rpe: 8) }.
81 Removed: forWorkout3 := {
82 Removed: (self new
83 Removed: id: 7;
84 Removed: workoutId: 3;
85 Removed: exerciseId: 10;
86 Removed: groupId: 1;
87 Removed: number: 1;
88 Removed: reps: 5;
89 Removed: load: 100;
90 Removed: rpe: 8).
91 Removed: (self new
92 Removed: id: 8;
93 Removed: workoutId: 3;
94 Removed: exerciseId: 11;
95 Removed: groupId: 1;
96 Removed: number: 2;
97 Removed: reps: 5;
98 Removed: load: 100;
99 Removed: rpe: 9).
100 Removed: (self new
101 Removed: id: 9;
102 Removed: workoutId: 3;
103 Removed: exerciseId: 16;
104 Removed: groupId: 2;
105 Removed: number: 3;
106 Removed: reps: 5;
107 Removed: load: 100;
108 Removed: rpe: 8).
109 Removed: (self new
110 Removed: id: 10;
111 Removed: workoutId: 3;
112 Removed: exerciseId: 17;
113 Removed: groupId: 2;
114 Removed: number: 4;
115 Removed: reps: 5;
116 Removed: load: 120;
117 Removed: rpe: 9).
118 Removed: (self new
119 Removed: id: 11;
120 Removed: workoutId: 3;
121 Removed: exerciseId: 16;
122 Removed: groupId: 2;
123 Removed: number: 3;
124 Removed: reps: 6;
125 Removed: load: 110;
126 Removed: rpe: 9).
127 Removed: (self new
128 Removed: id: 12;
129 Removed: workoutId: 3;
130 Removed: exerciseId: 17;
131 Removed: groupId: 2;
132 Removed: number: 4;
133 Removed: reps: 5;
134 Removed: load: 120;
135 Removed: rpe: 9) }.
136 Removed:
137 Removed: ^ OrderedCollection withAll: {
138 Removed: forWorkout1.
139 Removed: forWorkout2.
140 Removed: forWorkout3 } flattened
141 Removed: ]
142 Removed:
143 20 { #category : 'accessing' }
144 Removed: MFTSet class >> reps: anInteger [
145 Removed:
146 Removed: ^ self new
147 Removed: reps: anInteger;
148 Removed: yourself
149 Removed: ]
150 Removed:
151 Removed: { #category : 'as yet unclassified' }
152 Removed: MFTSet class >> reps: anInteger load: anInteger2 [
153 Removed:
154 Removed: ^ self new
155 Removed: reps: anInteger;
156 Removed: load: anInteger2;
157 Removed: yourself
158 Removed: ]
159 Removed:
160 Removed: { #category : 'as yet unclassified' }
161 Removed: MFTSet class >> reps: aValue load: aValue2 rpe: aValue3 [
162 Removed:
163 Removed: ^ self new
164 Removed: reps: aValue;
165 Removed: load: aValue2;
166 Removed: rpe: aValue3;
167 Removed: yourself
168 Removed: ]
169 Removed:
170 Removed: { #category : 'as yet unclassified' }
171 Removed: MFTSet class >> reps: aValue load: aValue2 rpe: aValue3 restAfter: aValue4 [
172 Removed:
173 Removed: ^ self new
174 Removed: reps: aValue;
175 Removed: load: aValue2;
176 Removed: rpe: aValue3;
177 Removed: restAfter: aValue4;
178 Removed: yourself
179 Removed: ]
180 Removed:
181 Removed: { #category : 'as yet unclassified' }
182 Removed: MFTSet class >> reps: anInteger rpe: aPercentage [
183 Removed:
184 Removed: ^ self new
185 Removed: reps: anInteger;
186 Removed: rpe: aPercentage;
187 Removed: yourself
188 Removed: ]
189 Removed:
190 Removed: { #category : 'accessing' }
191 21 MFTSet >> exercise [
192 22
193 Removed: ^ MFTSQLite3Database allExercises
194 Removed: detect: [ :exercise | exercise id = exerciseId ]
195 Removed: ifNone: [ MFTExercise new ]
23 Added: ^ exercise
196 24 ]
197 25
198 26 { #category : 'accessing' }
199 Removed: MFTSet >> exercise: aMFTExercise [
27 Added: MFTSet >> exercise: anObject [
200 28
201 Removed: exerciseId := aMFTExercise id
29 Added: exercise := anObject
202 30 ]
203 31
204 Removed: { #category : 'accessing' }
205 Removed: MFTSet >> exerciseId [
206 Removed:
207 Removed: ^ exerciseId
208 Removed: ]
209 Removed:
210 Removed: { #category : 'accessing' }
211 Removed: MFTSet >> exerciseId: anInteger [
212 Removed:
213 Removed: exerciseId := anInteger
214 Removed: ]
215 Removed:
216 Removed: { #category : 'accessing' }
217 Removed: MFTSet >> groupId [
218 Removed:
219 Removed: ^ groupId
220 Removed: ]
221 Removed:
222 Removed: { #category : 'accessing' }
223 Removed: MFTSet >> groupId: anInteger [
224 Removed:
225 Removed: groupId := anInteger
226 Removed: ]
227 Removed:
228 32 { #category : 'testing' }
229 33 MFTSet >> hasLoad [
230 34
@@ -262,18 +66,6 @@
262 66 ]
263 67
264 68 { #category : 'accessing' }
265 Removed: MFTSet >> number [
266 Removed:
267 Removed: ^ number
268 Removed: ]
269 Removed:
270 Removed: { #category : 'accessing' }
271 Removed: MFTSet >> number: anInteger [
272 Removed:
273 Removed: number := anInteger
274 Removed: ]
275 Removed:
276 Removed: { #category : 'accessing' }
277 69 MFTSet >> reps [
278 70
279 71 ^ reps
@@ -292,9 +84,9 @@
292 84 ]
293 85
294 86 { #category : 'accessing' }
295 Removed: MFTSet >> restAfter: anObject [
87 Added: MFTSet >> restAfter: aFloat [
296 88
297 Removed: restAfter := anObject
89 Added: restAfter := aFloat
298 90 ]
299 91
300 92 { #category : 'accessing' }
@@ -309,6 +101,18 @@
309 101 rpe := anInteger
310 102 ]
311 103
104 Added: { #category : 'accessing' }
105 Added: MFTSet >> setGroup [
106 Added:
107 Added: ^ setGroup
108 Added: ]
109 Added:
110 Added: { #category : 'accessing' }
111 Added: MFTSet >> setGroup: aMFTSetGroup [
112 Added:
113 Added: setGroup := aMFTSetGroup
114 Added: ]
115 Added:
312 116 { #category : 'as yet unclassified' }
313 117 MFTSet >> volume [
314 118 "reps is never nil, as enforced by the database schema."
@@ -317,13 +121,13 @@
317 121 ]
318 122
319 123 { #category : 'accessing' }
320 Removed: MFTSet >> workoutId [
124 Added: MFTSet >> workout [
321 125
322 Removed: ^ workoutId
126 Added: ^ workout
323 127 ]
324 128
325 129 { #category : 'accessing' }
326 Removed: MFTSet >> workoutId: anObject [
130 Added: MFTSet >> workout: anObject [
327 131
328 Removed: workoutId := anObject
132 Added: workout := anObject
329 133 ]
src/MyFitnessTracker-Core/MFTSetGroup.class.st
index 96454295..ecb1c14b 100644..100644
@@ -11,6 +11,39 @@
11 11 #package : 'MyFitnessTracker-Core'
12 12 }
13 13
14 Added: { #category : 'as yet unclassified' }
15 Added: MFTSetGroup class >> superset: aMFTWorkoutSet1 and: aMFTWorkoutSet2 [
16 Added:
17 Added: ^ self new sets: {
18 Added: aMFTWorkoutSet1.
19 Added: aMFTWorkoutSet2 }
20 Added: ]
21 Added:
22 Added: { #category : 'as yet unclassified' }
23 Added: MFTSetGroup class >> triset: aMFTWorkoutSet1 and: aMFTWorkoutSet2 and: aMFTWorkoutSet3 [
24 Added:
25 Added: ^ self new sets: {
26 Added: aMFTWorkoutSet1.
27 Added: aMFTWorkoutSet2.
28 Added: aMFTWorkoutSet3 }
29 Added: ]
30 Added:
31 Added: { #category : 'as yet unclassified' }
32 Added: MFTSetGroup class >> withSet: aMFTWorkoutSet [
33 Added:
34 Added: ^ self new
35 Added: sets: { aMFTWorkoutSet };
36 Added: yourself
37 Added: ]
38 Added:
39 Added: { #category : 'as yet unclassified' }
40 Added: MFTSetGroup class >> withSets: aMFTWorkoutSetCollection [
41 Added:
42 Added: ^ self new
43 Added: sets: aMFTWorkoutSetCollection;
44 Added: yourself
45 Added: ]
46 Added:
14 47 { #category : 'adding' }
15 48 MFTSetGroup >> addSet: aMFTSet [
16 49
@@ -26,7 +59,8 @@
26 59 { #category : 'initialization' }
27 60 MFTSetGroup >> description [
28 61
29 Removed: self isSuperset ifTrue: [
62 Added: ^ 'FIXME'
63 Added: "self isSuperset ifTrue: [
30 64 | ex1 ex2 |
31 65 ex1 := sets first exercise.
32 66 ex2 := sets second exercise.
@@ -40,7 +74,7 @@
40 74 ^ 'superset' ].
41 75 self isTriSet ifTrue: [ ^ 'tri-set' ].
42 76 self isGiantSet ifTrue: [ ^ 'giant set' ].
43 Removed: ^ 'regular set'
77 Added: ^ 'regular set'"
44 78 ]
45 79
46 80 { #category : 'as yet unclassified' }
@@ -148,7 +182,8 @@
148 182 "I answer the amount of unique exercises in all sets."
149 183
150 184 | uniqueExerciseIds |
151 Removed: uniqueExerciseIds := (sets collect: #exerciseId) asSet.
185 Added: uniqueExerciseIds := (sets collect: [ :set |
186 Added: set exercise canonicalName ]) asSet.
152 187 ^ uniqueExerciseIds size
153 188 ]
154 189
src/MyFitnessTracker-Core/MFTUser.class.st
index 8786e9a6..14ef2db0 100644..100644
@@ -176,9 +176,7 @@
176 176 { #category : 'as yet unclassified' }
177 177 MFTUser >> weights [
178 178
179 Removed: ^ self session user isLoggedIn
180 Removed: ifTrue: [ self session db getAllUserWeights ]
181 Removed: ifFalse: [ weights ]
179 Added: ^ weights
182 180 ]
183 181
184 182 { #category : 'as yet unclassified' }
@@ -190,9 +188,7 @@
190 188 { #category : 'as yet unclassified' }
191 189 MFTUser >> workouts [
192 190
193 Removed: ^ {MFTWorkout new. MFTWorkout new} "self session user isLoggedIn
194 Removed: ifTrue: [ self session db getAllUserWorkouts ]
195 Removed: ifFalse: [ workouts ]"
191 Added: ^ workouts
196 192 ]
197 193
198 194 { #category : 'as yet unclassified' }
src/MyFitnessTracker-Core/MFTWeight.class.st
index 9b87dba4..1e2c672b 100644..100644
@@ -5,9 +5,9 @@
5 5 #name : 'MFTWeight',
6 6 #superclass : 'MFTObject',
7 7 #instVars : [
8 Removed: 'userId',
9 8 'date',
10 Removed: 'kilograms'
9 Added: 'kilograms',
10 Added: 'user'
11 11 ],
12 12 #category : 'MyFitnessTracker-Core',
13 13 #package : 'MyFitnessTracker-Core'
@@ -65,13 +65,13 @@
65 65 ]
66 66
67 67 { #category : 'accessing' }
68 Removed: MFTWeight >> userId [
68 Added: MFTWeight >> user [
69 69
70 Removed: ^ userId
70 Added: ^ user
71 71 ]
72 72
73 73 { #category : 'accessing' }
74 Removed: MFTWeight >> userId: anObject [
74 Added: MFTWeight >> user: anObject [
75 75
76 Removed: userId := anObject
76 Added: user := anObject
77 77 ]
src/MyFitnessTracker-Core/MFTWorkout.class.st
index 24a1f7e4..c148f871 100644..100644
@@ -5,11 +5,13 @@
5 5 #name : 'MFTWorkout',
6 6 #superclass : 'MFTObject',
7 7 #instVars : [
8 Removed: 'userId',
9 Removed: 'date',
10 Removed: 'primaryMuscleGroupId',
11 Removed: 'secondaryMuscleGroupIds',
12 Removed: 'setGroups'
8 Added: 'setGroups',
9 Added: 'user',
10 Added: 'primaryMuscleGroup',
11 Added: 'secondaryMuscleGroups',
12 Added: 'plan',
13 Added: 'datePlanned',
14 Added: 'dateCompleted'
13 15 ],
14 16 #category : 'MyFitnessTracker-Core',
15 17 #package : 'MyFitnessTracker-Core'
@@ -18,31 +20,59 @@
18 20 { #category : 'as yet unclassified' }
19 21 MFTWorkout class >> placeholderCollection [
20 22
21 Removed: | placeholderSets workout1 workout2 workout3 |
22 Removed: placeholderSets := MFTSet placeholderCollection.
23 Added: | workout1 workout2 workout3 |
23 24 workout1 := self new
24 Removed: id: 1;
25 Removed: userId: 1;
26 Removed: date: (Date year: 2024 month: 1 day: 1);
27 Removed: primaryMuscleGroupId: 4;
28 Removed: sets:
29 Removed: (placeholderSets select: [ :set | set workoutId = 1 ]).
25 Added: dateCompleted: (Date year: 2024 month: 1 day: 1);
26 Added: primaryMuscleGroup: MFTMuscleGroup back;
27 Added: setGroups: {
28 Added: (MFTSetGroup withSet: (MFTSet new
29 Added: reps: 8;
30 Added: load: 120;
31 Added: exercise: MFTExercise latPulldown)).
32 Added: (MFTSetGroup withSet: (MFTSet new
33 Added: reps: 8;
34 Added: load: 120;
35 Added: exercise: MFTExercise deadlift)).
36 Added: (MFTSetGroup withSet: (MFTSet new
37 Added: reps: 8;
38 Added: load: 120;
39 Added: exercise: MFTExercise latPulldown)) }.
40 Added:
30 41 workout2 := self new
31 Removed: id: 2;
32 Removed: userId: 1;
33 Removed: date: (Date year: 2024 month: 1 day: 2);
34 Removed: primaryMuscleGroupId: 5;
35 Removed: sets:
36 Removed: (placeholderSets select: [ :set | set workoutId = 2 ]).
42 Added: dateCompleted: (Date year: 2024 month: 1 day: 2);
43 Added: primaryMuscleGroup: MFTMuscleGroup legs;
44 Added: setGroups: {
45 Added: (MFTSetGroup withSets: {
46 Added: (MFTSet new
47 Added: reps: 12;
48 Added: load: 140;
49 Added: exercise: MFTExercise legExtension).
50 Added: (MFTSet new
51 Added: reps: 8;
52 Added: load: 120;
53 Added: exercise: MFTExercise squat) }).
54 Added: (MFTSetGroup withSet: (MFTSet new
55 Added: reps: 10;
56 Added: load: 80;
57 Added: exercise: MFTExercise legCurl)) }.
58 Added:
37 59 workout3 := self new
38 Removed: id: 3;
39 Removed: userId: 1;
40 Removed: date: (Date year: 2024 month: 1 day: 3);
41 Removed: primaryMuscleGroupId: 6;
42 Removed: secondaryMuscleGroupIds:
43 Removed: (OrderedCollection withAll: { 5. 7 });
44 Removed: sets:
45 Removed: (placeholderSets select: [ :set | set workoutId = 3 ]).
60 Added: dateCompleted: (Date year: 2024 month: 1 day: 3);
61 Added: primaryMuscleGroup: MFTMuscleGroup chest;
62 Added: addSets: {
63 Added: (MFTSet new
64 Added: reps: 8;
65 Added: load: 120;
66 Added: exercise: MFTExercise benchPress).
67 Added: (MFTSet new
68 Added: reps: 8;
69 Added: load: 120;
70 Added: exercise: MFTExercise latPulldown).
71 Added: (MFTSet new
72 Added: reps: 8;
73 Added: load: 120;
74 Added: exercise: MFTExercise latPulldown) }.
75 Added:
46 76 ^ OrderedCollection withAll: {
47 77 workout1.
48 78 workout2.
@@ -61,6 +91,16 @@
61 91 aMFTSetGroupCollection do: [ :setGroup | setGroups add: setGroup ]
62 92 ]
63 93
94 Added: { #category : 'adding' }
95 Added: MFTWorkout >> addSets: aMFTSetCollection [
96 Added: "Automatically wrap each MFTSet in a MFTSetGroup."
97 Added:
98 Added: aMFTSetCollection do: [ :set |
99 Added: | setGroup |
100 Added: setGroup := MFTSetGroup withSet: set.
101 Added: setGroups addLast: setGroup ]
102 Added: ]
103 Added:
64 104 { #category : 'as yet unclassified' }
65 105 MFTWorkout >> allSetGroupsAreRegular [
66 106
@@ -85,74 +125,73 @@
85 125 ^ self sets anySatisfy: #hasVolume
86 126 ]
87 127
88 Removed: { #category : 'as yet unclassified' }
89 Removed: MFTWorkout >> date [
90 Removed: ^ date
128 Added: { #category : 'accessing' }
129 Added: MFTWorkout >> dateCompleted [
130 Added:
131 Added: ^ dateCompleted
91 132 ]
92 133
93 Removed: { #category : 'as yet unclassified' }
94 Removed: MFTWorkout >> date: aDate [
95 Removed: date := aDate
134 Added: { #category : 'accessing' }
135 Added: MFTWorkout >> dateCompleted: aDate [
136 Added:
137 Added: dateCompleted := aDate
96 138 ]
97 139
98 Removed: { #category : 'initialization' }
99 Removed: MFTWorkout >> initialize [
140 Added: { #category : 'accessing' }
141 Added: MFTWorkout >> datePlanned [
100 142
101 Removed: super initialize.
102 Removed: date := Date today.
103 Removed: setGroups := OrderedCollection new.
104 Removed: secondaryMuscleGroupIds := OrderedCollection new
143 Added: ^ datePlanned
105 144 ]
106 145
107 Removed: { #category : 'as yet unclassified' }
108 Removed: MFTWorkout >> primaryMuscleGroup [
146 Added: { #category : 'accessing' }
147 Added: MFTWorkout >> datePlanned: aDate [
109 148
110 Removed: ^ MFTSQLite3Database allMuscleGroups
111 Removed: detect: [ :group | group id = primaryMuscleGroupId ]
112 Removed: ifNone: [ nil ]
149 Added: datePlanned := aDate
113 150 ]
114 151
115 Removed: { #category : 'as yet unclassified' }
116 Removed: MFTWorkout >> primaryMuscleGroup: aMFTMuscleGroup [
152 Added: { #category : 'initialization' }
153 Added: MFTWorkout >> initialize [
117 154
118 Removed: primaryMuscleGroupId := aMFTMuscleGroup id
155 Added: super initialize.
156 Added: datePlanned := Date today.
157 Added: setGroups := OrderedCollection new.
158 Added: secondaryMuscleGroups := OrderedCollection new
119 159 ]
120 160
121 Removed: { #category : 'as yet unclassified' }
122 Removed: MFTWorkout >> primaryMuscleGroupId [
161 Added: { #category : 'accessing' }
162 Added: MFTWorkout >> plan [
123 163
124 Removed: ^ primaryMuscleGroupId
164 Added: ^ plan
125 165 ]
126 166
127 Removed: { #category : 'as yet unclassified' }
128 Removed: MFTWorkout >> primaryMuscleGroupId: anInteger [
167 Added: { #category : 'accessing' }
168 Added: MFTWorkout >> plan: aMFTWorkoutPlan [
129 169
130 Removed: primaryMuscleGroupId := anInteger
170 Added: plan := aMFTWorkoutPlan
131 171 ]
132 172
133 Removed: { #category : 'as yet unclassified' }
134 Removed: MFTWorkout >> secondaryMuscleGroupIds [
173 Added: { #category : 'accessing' }
174 Added: MFTWorkout >> primaryMuscleGroup [
135 175
136 Removed: ^ secondaryMuscleGroupIds
176 Added: ^ primaryMuscleGroup
137 177 ]
138 178
139 Removed: { #category : 'as yet unclassified' }
140 Removed: MFTWorkout >> secondaryMuscleGroupIds: anIntegerCollection [
179 Added: { #category : 'accessing' }
180 Added: MFTWorkout >> primaryMuscleGroup: anObject [
141 181
142 Removed: secondaryMuscleGroupIds := anIntegerCollection
182 Added: primaryMuscleGroup := anObject
143 183 ]
144 184
145 Removed: { #category : 'as yet unclassified' }
185 Added: { #category : 'accessing' }
146 186 MFTWorkout >> secondaryMuscleGroups [
147 187
148 Removed: ^ MFTSQLite3Database allMuscleGroups select: [ :group |
149 Removed: secondaryMuscleGroupIds includes: group id ]
188 Added: ^ secondaryMuscleGroups
150 189 ]
151 190
152 Removed: { #category : 'as yet unclassified' }
153 Removed: MFTWorkout >> secondaryMuscleGroups: aMFTMuscleGroupCollection [
191 Added: { #category : 'accessing' }
192 Added: MFTWorkout >> secondaryMuscleGroups: anObject [
154 193
155 Removed: secondaryMuscleGroupIds := aMFTMuscleGroupCollection collect: #id
194 Added: secondaryMuscleGroups := anObject
156 195 ]
157 196
158 197 { #category : 'as yet unclassified' }
@@ -184,16 +223,22 @@
184 223 self setGroups: groups
185 224 ]
186 225
187 Removed: { #category : 'as yet unclassified' }
188 Removed: MFTWorkout >> userId [
226 Added: { #category : 'accessing' }
227 Added: MFTWorkout >> status [
189 228
190 Removed: ^ userId
229 Added: ^ dateCompleted ifNotNil: [ #completed ] ifNil: [ #planned ]
191 230 ]
192 231
193 Removed: { #category : 'as yet unclassified' }
194 Removed: MFTWorkout >> userId: anObject [
232 Added: { #category : 'accessing' }
233 Added: MFTWorkout >> user [
195 234
196 Removed: userId := anObject
235 Added: ^ user
236 Added: ]
237 Added:
238 Added: { #category : 'accessing' }
239 Added: MFTWorkout >> user: anObject [
240 Added:
241 Added: user := anObject
197 242 ]
198 243
199 244 { #category : 'as yet unclassified' }
src/MyFitnessTracker-Core/MFTWorkoutPlan.class.st
index 80a344ee..9c53b735 100644..100644
@@ -11,6 +11,13 @@
11 11 #package : 'MyFitnessTracker-Core'
12 12 }
13 13
14 Added: { #category : 'adding' }
15 Added: MFTWorkoutPlan >> addWorkout: aMFTWorkout [
16 Added:
17 Added: workouts addLast: aMFTWorkout.
18 Added: aMFTWorkout ifNotNil: [ aMFTWorkout plan: self ]
19 Added: ]
20 Added:
14 21 { #category : 'accessing' }
15 22 MFTWorkoutPlan >> initialize: aMFTWorkoutCollection [
16 23