[Pharo] Personal fitness tracker web app.
Update core domain objects.
Changed files
- src/MyFitnessTracker-Core/MFTExercise.class.st
- src/MyFitnessTracker-Core/MFTMuscle.class.st
- src/MyFitnessTracker-Core/MFTMuscleGroup.class.st
- src/MyFitnessTracker-Core/MFTSet.class.st
- src/MyFitnessTracker-Core/MFTSetGroup.class.st
- src/MyFitnessTracker-Core/MFTUser.class.st
- src/MyFitnessTracker-Core/MFTWeight.class.st
- src/MyFitnessTracker-Core/MFTWorkout.class.st
- src/MyFitnessTracker-Core/MFTWorkoutPlan.class.st
src/MyFitnessTracker-Core/MFTExercise.class.st
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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