Big MFTWorkout rework.

Commit
b9ec19fa77a3fe063c6c8be02a21dcd8c54b22bc
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
src/MyFitnessTracker/MFTWorkout.class.st
index f0506b49..29706729 100644..100644
@@ -20,21 +20,36 @@
20 20 { #category : #'instance creation' }
21 21 MFTWorkout class >> newFromDictionary: aDictionary [
22 22
23 Added: | primaryMuscleConstructor primaryMuscle secondaryMusclesContructors secondaryMuscles |
24 Added: primaryMuscleConstructor := (aDictionary
25 Added: at: 'primary_muscle'
26 Added: ifAbsent: [ String new ]) asSymbol.
27 Added: primaryMuscle := (MFTMuscleGroup respondsTo: primaryMuscleConstructor)
28 Added: ifTrue: [
29 Added: MFTMuscleGroup perform: primaryMuscleConstructor ]
30 Added: ifFalse: [ MFTMuscleGroup new ].
31 Added: secondaryMusclesContructors := ((aDictionary
32 Added: at: 'secondary_muscles'
33 Added: ifAbsent: [ String new ]) splitOn:
34 Added: ', ') collect: #asSymbol.
35 Added: secondaryMuscles := secondaryMusclesContructors collect: [ :symbol |
36 Added: (MFTMuscleGroup respondsTo: symbol)
37 Added: ifTrue: [ MFTMuscleGroup perform: symbol ]
38 Added: ifFalse: [ MFTMuscleGroup new ] ].
39 Added:
23 40 ^ self new
24 41 date: (Date fromString: (aDictionary at: 'date'));
25 Removed: primaryMuscle:
26 Removed: (MFTMuscle new latinName: (aDictionary at: 'primary_muscle'));
27 Removed: secondaryMuscles:
28 Removed: (MFTMuscle new latinName: (aDictionary at: 'secondary_muscles'));
42 Added: primaryMuscle: primaryMuscle;
43 Added: secondaryMuscles: secondaryMuscles;
29 44 yourself
30 45 ]
31 46
32 47 { #category : #'as yet unclassified' }
33 48 MFTWorkout class >> placeholderCollection [
34 49
35 Removed: | workout1 workout2 workout3 |
50 Added: | workout1 workout2 workout3 workout4 workout5 |
36 51 workout1 := self new
37 Removed: date: (Date fromString: '01/03/2023');
52 Added: date: (Date fromString: '01/01/2024');
38 53 primaryMuscle: MFTMuscleGroup chest;
39 54 exercises: (OrderedCollection
40 55 with: (MFTExercise cableRow sets: {
@@ -52,7 +67,7 @@
52 67 (MFTSet reps: 6 rpe: 8).
53 68 (MFTSet reps: 8 rpe: 10) } asOrderedCollection)).
54 69 workout2 := self new
55 Removed: date: (Date fromString: '01/02/2023');
70 Added: date: (Date fromString: '01/02/2024');
56 71 exercises: (OrderedCollection
57 72 with: (MFTExercise cableRow sets: {
58 73 (MFTSet reps: 8 rpe: 6).
@@ -62,15 +77,29 @@
62 77 with: MFTExercise shoulderPressDumbell
63 78 with: MFTExercise declineBenchPress).
64 79 workout3 := self new
65 Removed: date: (Date fromString: '01/01/2023');
80 Added: date: (Date fromString: '01/03/2024');
66 81 addExercise: MFTExercise cableRow;
67 82 addExercise: MFTExercise shoulderPressDumbell;
68 83 addExercise: MFTExercise declineBenchPress.
84 Added: workout4 := self new
85 Added: date: (Date fromString: '01/09/2024');
86 Added: exercises: {
87 Added: MFTExercise cableRow.
88 Added: MFTExercise shoulderPressDumbell.
89 Added: MFTExercise declineBenchPress } asOrderedCollection.
90 Added: workout5 := self new
91 Added: date: (Date fromString: '01/10/2024');
92 Added: exercises: {
93 Added: MFTExercise cableRow.
94 Added: MFTExercise shoulderPressDumbell.
95 Added: MFTExercise declineBenchPress } asOrderedCollection.
69 96
70 97 ^ OrderedCollection withAll: {
71 98 workout1.
72 99 workout2.
73 Removed: workout3 }
100 Added: workout3.
101 Added: workout4.
102 Added: workout5 }
74 103 ]
75 104
76 105 { #category : #accessing }
@@ -82,11 +111,12 @@
82 111 ]
83 112
84 113 { #category : #accessing }
85 Removed: MFTWorkout class >> primaryMuscle: aMFTMuscle1 secondaryMuscles: aMFTMuscle2 [
114 Added: MFTWorkout class >> primaryMuscle: aMFTMuscle secondaryMuscles: aMFTMuscleCollection [
115 Added:
86 116 ^ self new
87 Removed: primaryMuscle: aMFTMuscle1;
88 Removed: secondaryMuscles: aMFTMuscle2;
89 Removed: yourself
117 Added: primaryMuscle: aMFTMuscle;
118 Added: secondaryMuscles: aMFTMuscleCollection;
119 Added: yourself
90 120 ]
91 121
92 122 { #category : #initialization }
@@ -112,9 +142,9 @@
112 142 ]
113 143
114 144 { #category : #accessing }
115 Removed: MFTWorkout >> exercises: listOfExercises [
145 Added: MFTWorkout >> exercises: aMFTExerciseCollection [
116 146
117 Removed: exercises := listOfExercises
147 Added: exercises := aMFTExerciseCollection
118 148 ]
119 149
120 150 { #category : #'as yet unclassified' }
@@ -138,28 +168,6 @@
138 168 secondaryMuscles := OrderedCollection new
139 169 ]
140 170
141 Removed: { #category : #rendering }
142 Removed: MFTWorkout >> placeholder [
143 Removed: "Delete me"
144 Removed:
145 Removed: ^ self
146 Removed: primaryMuscle: MFTMuscleGroup chest;
147 Removed: exercises: {
148 Removed: (MFTExercise cableRow sets: {
149 Removed: (MFTSet reps: 8 rpe: 6).
150 Removed: (MFTSet reps: 6 rpe: 8).
151 Removed: (MFTSet reps: 6 rpe: 10).
152 Removed: (MFTSet reps: 15 rpe: 4) }).
153 Removed: (MFTExercise shoulderPressDumbell sets: {
154 Removed: (MFTSet reps: 10 rpe: 6).
155 Removed: (MFTSet reps: 6 rpe: 8).
156 Removed: (MFTSet reps: 6 rpe: 10) }).
157 Removed: (MFTExercise declineBenchPress sets: {
158 Removed: (MFTSet reps: 5 rpe: 6).
159 Removed: (MFTSet reps: 6 rpe: 8).
160 Removed: (MFTSet reps: 8 rpe: 10) }) }
161 Removed: ]
162 Removed:
163 171 { #category : #accessing }
164 172 MFTWorkout >> primaryMuscle [
165 173
@@ -174,17 +182,17 @@
174 182
175 183 { #category : #initialization }
176 184 MFTWorkout >> removeExercise: anExercise [
177 Removed: exercises remove: anExercise
185 Added:
186 Added: exercises remove: anExercise
178 187 ]
179 188
180 189 { #category : #rendering }
181 190 MFTWorkout >> renderContentOn: html [
182 191
183 192 html definitionList: [
184 Removed: date ifNotNil: [
185 Removed: html
186 Removed: definitionTerm: 'Date';
187 Removed: definitionData: date ].
193 Added: html
194 Added: definitionTerm: 'Date';
195 Added: definitionData: date.
188 196 primaryMuscle englishName ifNotEmpty: [
189 197 html
190 198 definitionTerm: 'Primary Muscle';
@@ -219,6 +227,8 @@
219 227 { #category : #rendering }
220 228 MFTWorkout >> renderExerciseTableOn: html [
221 229
230 Added: | anExerciseHasVolume |
231 Added: anExerciseHasVolume := exercises anySatisfy: [ :ex | ex volume ~~ 0 ].
222 232 html table
223 233 class: 'table table-striped table-bordered';
224 234 with: [
@@ -226,21 +236,15 @@
226 236 exercises do: [ :exercise |
227 237 html tableRow: [
228 238 html tableData: [
229 Removed: html
230 Removed: text: exercise englishName;
231 Removed: text: ': '.
232 Removed: exercise sets
233 Removed: ifNotEmpty: [
234 Removed: html text: exercise repsBySet asCommaString.
235 Removed: html tableData
236 Removed: style: 'text-align: right';
237 Removed: with: exercise repsBySet sum ]
238 Removed: ifEmpty: [
239 Removed: html text: 0.
240 Removed: html tableData
241 Removed: style: 'text-align: right';
242 Removed: with: 0 ] ].
243 Removed: (exercises anySatisfy: [ :ex | ex volume ~~ 0 ]) ifTrue: [
239 Added: html text: exercise englishName.
240 Added: exercise sets ifNotEmpty: [
241 Added: html
242 Added: text: ': ';
243 Added: text: exercise repsBySet asCommaString ] ].
244 Added: html tableData
245 Added: style: 'text-align: right';
246 Added: with: exercise repsBySet sum.
247 Added: anExerciseHasVolume ifTrue: [
244 248 html tableData
245 249 style: 'text-align: right';
246 250 with: exercise volume ] ] ].
@@ -262,30 +266,6 @@
262 266 with: 'Volume' ] ]
263 267 ]
264 268
265 Removed: { #category : #'as yet unclassified' }
266 Removed: MFTWorkout >> saveToDatabase [
267 Removed: "Save data to the SQLite3 database"
268 Removed:
269 Removed: | connection statement |
270 Removed: connection := SQLite3Connection on:
271 Removed: (Smalltalk imageDirectory / 'mft.db') fullName.
272 Removed: connection open.
273 Removed: connection execute: 'CREATE TABLE IF NOT EXISTS workout(
274 Removed: id INTEGER PRIMARY KEY AUTOINCREMENT,
275 Removed: date TEXT NOT NULL,
276 Removed: exercises JSON,
277 Removed: primaryMuscle TEXT,
278 Removed: secondaryMuscles TEXT
279 Removed: );'.
280 Removed: "Insert data into the database"
281 Removed: statement := 'INSERT INTO workout (date, exercises, primaryMuscle, secondaryMuscles) VALUES (?, ?, ?, ?)'.
282 Removed: connection execute: statement with: {
283 Removed: date.
284 Removed: exercises.
285 Removed: primaryMuscle latinName.
286 Removed: secondaryMuscles }
287 Removed: ]
288 Removed:
289 269 { #category : #accessing }
290 270 MFTWorkout >> secondaryMuscles [
291 271
@@ -293,9 +273,9 @@
293 273 ]
294 274
295 275 { #category : #accessing }
296 Removed: MFTWorkout >> secondaryMuscles: aMuscleArray [
276 Added: MFTWorkout >> secondaryMuscles: aMFTMuscleCollection [
297 277
298 Removed: secondaryMuscles := aMuscleArray
278 Added: secondaryMuscles := aMFTMuscleCollection
299 279 ]
300 280
301 281 { #category : #'as yet unclassified' }