Merge meee

Commit
7889737b5ebfded083a0e74899bb2c9f874f577e
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker/MFTLoginRegisterLogoutComponent.class.st
index b83a19eb..0dcbcc83 100644..100644
@@ -14,7 +14,7 @@
14 14 | existingUser |
15 15 existingUser := MFTSQLite3Database getExistingUser: aMFTUser.
16 16 aMFTUser passwordHash = existingUser passwordHash
17 Removed: ifTrue: [ self session login: aMFTUser ]
17 Added: ifTrue: [ self session login: existingUser ]
18 18 ifFalse: [ self inform: 'Login failed' ]
19 19 ]
20 20
src/MyFitnessTracker/MFTMainUserCard.class.st
index b85ed78d..0b14af28 100644..100644
@@ -22,6 +22,8 @@
22 22 { #category : #rendering }
23 23 MFTMainUserCard >> renderContentOn: html [
24 24
25 Added: | user |
26 Added: user := self session user.
25 27 self renderCardOn: html with: [
26 28 html jumbotron
27 29 class: 'p-3 bg-light';
@@ -31,7 +33,7 @@
31 33 with: [
32 34 html
33 35 text: 'Welcome, ';
34 Removed: code: self session user username;
36 Added: code: (user realFirstName ifEmpty: [ user username ]);
35 37 text: '!' ].
36 38 html big textMuted with: subtitle ] ]
37 39 ]
src/MyFitnessTracker/MFTMuscle.class.st
index a5f2d0d0..39945f6c 100644..100644
@@ -96,7 +96,7 @@
96 96 ]
97 97
98 98 { #category : #muscle }
99 Removed: MFTMuscle class >> flexorCarpiRadialias [
99 Added: MFTMuscle class >> flexorCarpiRadialis [
100 100
101 101 ^ self newWithLatinName
102 102 englishName: 'Flexor Carpi Radialis';
src/MyFitnessTracker/MFTMuscleGroup.class.st
index 0d6aa563..818e7abe 100644..100644
@@ -73,7 +73,7 @@
73 73 latinName: 'antebrachium';
74 74 muscles: {
75 75 MFTMuscle brachioRadialis.
76 Removed: MFTMuscle flexorCarpiRadialias.
76 Added: MFTMuscle flexorCarpiRadialis.
77 77 MFTMuscle flexorCarpiUlnaris.
78 78 MFTMuscle extensorCarpiRadialisLongus.
79 79 MFTMuscle extensorCarpiRadialiasBrevis.
src/MyFitnessTracker/MFTSQLite3Database.class.st
index 066daa61..eda615fd 100644..100644
@@ -30,48 +30,82 @@
30 30 ]
31 31
32 32 { #category : #'as yet unclassified' }
33 Removed: MFTSQLite3Database class >> ensureTablesExist [
33 Added: MFTSQLite3Database class >> ensureAllTablesExist [
34 34
35 35 self defaultConnection
36 36 open;
37 Removed: execute: 'CREATE TABLE IF NOT EXISTS "prospects" (
37 Added: execute: self ensureUsersTableExists;
38 Added: execute: self ensureProspectsTableExists;
39 Added: execute: self ensureWeightsTableExists;
40 Added: execute: self ensureWorkoutsTableExists;
41 Added: execute: self ensureExercisesTableExists;
42 Added: execute: self ensureSetsTableExists;
43 Added: close
44 Added: ]
45 Added:
46 Added: { #category : #'as yet unclassified' }
47 Added: MFTSQLite3Database class >> ensureExercisesTableExists [
48 Added:
49 Added: ^ 'CREATE TABLE IF NOT EXISTS "exercises" (
50 Added: "id" INTEGER NOT NULL UNIQUE,
51 Added: "name" TEXT NOT NULL,
52 Added: PRIMARY KEY("id" AUTOINCREMENT))'
53 Added: ]
54 Added:
55 Added: { #category : #'as yet unclassified' }
56 Added: MFTSQLite3Database class >> ensureProspectsTableExists [
57 Added:
58 Added: ^ 'CREATE TABLE IF NOT EXISTS "prospects" (
38 59 "id" INTEGER,
39 60 "email" TEXT NOT NULL,
40 61 "date_time" TEXT NOT NULL,
41 Removed: PRIMARY KEY("id" AUTOINCREMENT)
42 Removed: )';
43 Removed: execute: 'CREATE TABLE IF NOT EXISTS "users" (
62 Added: PRIMARY KEY("id" AUTOINCREMENT))'
63 Added: ]
64 Added:
65 Added: { #category : #'as yet unclassified' }
66 Added: MFTSQLite3Database class >> ensureSetsTableExists [
67 Added:
68 Added: ^ 'CREATE TABLE IF NOT EXISTS "sets" (
69 Added: "id" INTEGER NOT NULL UNIQUE,
70 Added: ""
71 Added: "name" TEXT NOT NULL,
72 Added: PRIMARY KEY("id" AUTOINCREMENT))'
73 Added: ]
74 Added:
75 Added: { #category : #'as yet unclassified' }
76 Added: MFTSQLite3Database class >> ensureUsersTableExists [
77 Added:
78 Added: ^ 'CREATE TABLE IF NOT EXISTS "users" (
44 79 "id" INTEGER UNIQUE,
45 80 "username" TEXT NOT NULL,
46 81 "password_hash" BLOB NOT NULL,
47 82 "real_first_name" TEXT,
48 83 "real_last_name" TEXT,
49 84 "date_of_birth" TEXT,
50 Removed: PRIMARY KEY("id" AUTOINCREMENT)
51 Removed: )';
52 Removed: execute: 'CREATE TABLE IF NOT EXISTS "workouts" (
85 Added: PRIMARY KEY("id" AUTOINCREMENT))'
86 Added: ]
87 Added:
88 Added: { #category : #'as yet unclassified' }
89 Added: MFTSQLite3Database class >> ensureWeightsTableExists [
90 Added:
91 Added: ^ 'CREATE TABLE IF NOT EXISTS "weights" (
92 Added: "id" INTEGER UNIQUE,
93 Added: "user_id" INTEGER NOT NULL,
94 Added: "date" TEXT NOT NULL,
95 Added: "value" NUMERIC NOT NULL,
96 Added: PRIMARY KEY("id" AUTOINCREMENT))'
97 Added: ]
98 Added:
99 Added: { #category : #'as yet unclassified' }
100 Added: MFTSQLite3Database class >> ensureWorkoutsTableExists [
101 Added:
102 Added: ^ 'CREATE TABLE IF NOT EXISTS "workouts" (
53 103 "id" INTEGER UNIQUE,
54 104 "user_id" INTEGER NOT NULL,
55 105 "date" TEXT NOT NULL,
56 106 "primary_muscle" TEXT,
57 107 "secondary_muscles" TEXT,
58 Removed: PRIMARY KEY("id" AUTOINCREMENT)
59 Removed: )';
60 Removed: execute: 'CREATE TABLE IF NOT EXISTS "exercises" (
61 Removed: "id" INTEGER NOT NULL UNIQUE,
62 Removed: "workout_id" INTEGER NOT NULL,
63 Removed: "english_name" TEXT NOT NULL,
64 Removed: "sets" TEXT,
65 Removed: PRIMARY KEY("id" AUTOINCREMENT)
66 Removed: )';
67 Removed: execute: 'CREATE TABLE IF NOT EXISTS "weights" (
68 Removed: "id" INTEGER UNIQUE,
69 Removed: "user_id" INTEGER NOT NULL,
70 Removed: "date" TEXT NOT NULL,
71 Removed: "value" NUMERIC NOT NULL,
72 Removed: PRIMARY KEY("id" AUTOINCREMENT)
73 Removed: )';
74 Removed: close
108 Added: PRIMARY KEY("id" AUTOINCREMENT))'
75 109 ]
76 110
77 111 { #category : #'as yet unclassified' }
@@ -100,7 +134,7 @@
100 134
101 135 defaultLocation := (Smalltalk imageDirectory / 'mft.sqlite3')
102 136 fullName.
103 Removed: self ensureTablesExist
137 Added: self ensureAllTablesExist
104 138 ]
105 139
106 140 { #category : #'instance creation' }
@@ -130,6 +164,7 @@
130 164
131 165 | connection |
132 166 connection := self defaultConnection open.
167 Added: connection beginTransaction.
133 168 MFTWorkout placeholderCollection do: [ :workout |
134 169 | workoutId |
135 170 connection
@@ -139,8 +174,8 @@
139 174 with: {
140 175 1.
141 176 workout date yyyymmdd.
142 Removed: workout primaryMuscle latinName.
143 Removed: (workout secondaryMuscles collect: #latinName) asCommaString }.
177 Added: workout primaryMuscle canonicalName.
178 Added: (workout secondaryMuscles collect: #canonicalName) asCommaString }.
144 179 workoutId := (connection
145 180 execute: 'SELECT workouts.id
146 181 FROM workouts
@@ -148,12 +183,13 @@
148 183 value: workout date yyyymmdd) onlyValue.
149 184 workout exercises do: [ :exercise |
150 185 connection
151 Removed: execute: 'INSERT INTO exercises(workout_id, english_name, sets)
186 Added: execute: 'INSERT INTO exercises(workout_id, name, sets)
152 187 VALUES(?, ?, ?)'
153 188 with: {
154 189 workoutId.
155 Removed: exercise englishName.
190 Added: exercise canonicalName.
156 191 exercise sets asJson } ] ].
192 Added: connection commitTransaction.
157 193 connection close
158 194 ]
159 195
@@ -181,8 +217,8 @@
181 217 connection open.
182 218 user := (connection
183 219 execute: 'SELECT *
184 Removed: FROM users
185 Removed: WHERE id = ?'
220 Added: FROM users
221 Added: WHERE id = ?'
186 222 value: id) onlyRow.
187 223 connection close.
188 224 ^ user
@@ -195,7 +231,7 @@
195 231 open;
196 232 execute: 'INSERT INTO prospects(email,date_time) VALUES (?, ?);'
197 233 value: anEmail
198 Removed: value: DateAndTime now asUTC rounded asString;
234 Added: value: DateAndTime now asUTC rounded;
199 235 close
200 236 ]
201 237
@@ -213,12 +249,15 @@
213 249 { #category : #'as yet unclassified' }
214 250 MFTSQLite3Database >> allUserWorkouts [
215 251
216 Removed: ^ (connection
217 Removed: execute: 'SELECT *
218 Removed: FROM workouts
219 Removed: WHERE user_id = ?'
220 Removed: value: userId) rows collect: [ :each |
221 Removed: MFTWorkout newFromDictionary: each asDictionary ]
252 Added: | rows workouts |
253 Added: rows := (connection
254 Added: execute: 'SELECT *
255 Added: FROM workouts
256 Added: WHERE user_id = ?'
257 Added: value: userId) rows.
258 Added: workouts := rows collect: [ :each |
259 Added: MFTWorkout newFromDictionary: each asDictionary ].
260 Added: ^ workouts
222 261 ]
223 262
224 263 { #category : #'as yet unclassified' }
@@ -266,6 +305,7 @@
266 305 { #category : #'as yet unclassified' }
267 306 MFTSQLite3Database >> deleteWorkout: aMFTWorkout [
268 307
308 Added: connection beginTransaction.
269 309 connection
270 310 execute: 'DELETE
271 311 FROM workouts
@@ -273,7 +313,8 @@
273 313 AND date = ?'
274 314 with: {
275 315 userId.
276 Removed: aMFTWorkout date yyyymmdd }
316 Added: aMFTWorkout date yyyymmdd }.
317 Added: connection commitTransaction
277 318 ]
278 319
279 320 { #category : #private }
@@ -298,11 +339,11 @@
298 339 MFTSQLite3Database >> insertExercise: aMFTExercise forWorkoutId: workoutId [
299 340
300 341 connection
301 Removed: execute: 'INSERT INTO exercises(workout_id, english_name, sets)
342 Added: execute: 'INSERT INTO exercises(workout_id, name, sets)
302 343 VALUES( ?, ?, ?)'
303 344 with: {
304 345 workoutId.
305 Removed: aMFTExercise englishName.
346 Added: aMFTExercise canonicalName.
306 347 aMFTExercise sets asJson }
307 348 ]
308 349
@@ -322,9 +363,13 @@
322 363 MFTSQLite3Database >> insertWorkout: aMFTWorkout [
323 364
324 365 | workoutId |
366 Added: connection beginTransaction.
325 367 connection
326 Removed: execute:
327 Removed: 'INSERT INTO workouts(user_id, date, primary_muscle, secondary_muscles)
368 Added: execute: 'INSERT INTO Workouts ("id" INTEGER UNIQUE,
369 Added: "user_id",
370 Added: "date" ,
371 Added: "primary_muscle",
372 Added: "secondary_muscles" )
328 373 VALUES(?, ?, ?, ?)'
329 374 with: {
330 375 userId.
@@ -342,10 +387,11 @@
342 387 userId.
343 388 aMFTWorkout date yyyymmdd.
344 389 aMFTWorkout primaryMuscle englishName.
345 Removed: (aMFTWorkout secondaryMuscles collect: #englishName)
346 Removed: asCommaString }) onlyValue.
390 Added: (aMFTWorkout secondaryMuscles collect:
391 Added: #canonicalName) asCommaString }) onlyValue.
347 392 aMFTWorkout exercises do: [ :exercise |
348 Removed: self insertExercise: exercise forWorkoutId: workoutId ]
393 Added: self insertExercise: exercise forWorkoutId: workoutId ].
394 Added: connection commitTransaction
349 395 ]
350 396
351 397 { #category : #'as yet unclassified' }
src/MyFitnessTracker/MFTWorkout.class.st
index e6fe82a1..66d54b51 100644..100644
@@ -32,10 +32,11 @@
32 32 at: 'secondary_muscles'
33 33 ifAbsent: [ String new ]) splitOn:
34 34 ', ') collect: #asSymbol.
35 Added: secondaryMusclesContructors removeAllSuchThat: [ :each | each = #'' ].
35 36 secondaryMuscles := secondaryMusclesContructors collect: [ :symbol |
36 37 (MFTMuscleGroup respondsTo: symbol)
37 38 ifTrue: [ MFTMuscleGroup perform: symbol ]
38 Removed: ifFalse: [ MFTMuscleGroup new ] ].
39 Added: ifFalse: [ nil ] ].
39 40
40 41 ^ self new
41 42 date: (Date fromString: (aDictionary at: 'date'));