Clean up old SQLite3 model classes.

Commit
56fccf0aec394e47e68c09e2744619de92f6e0ec
Author
Marius Peter <marius.peter@tutanota.com>
Author date
Committer
Marius Peter <marius.peter@tutanota.com>
Committer date
Changed files
src/MyFitnessTracker-Model/MFTSQLite3Database.class.st
index 2e42fe82..00000000 100644..000000
@@ -1,524 +0,0 @@
1 Removed: Class {
2 Removed: #name : 'MFTSQLite3Database',
3 Removed: #superclass : 'SQLite3Database',
4 Removed: #instVars : [
5 Removed: 'user'
6 Removed: ],
7 Removed: #classInstVars : [
8 Removed: 'defaultLocation',
9 Removed: 'allMuscleGroups',
10 Removed: 'allMuscles',
11 Removed: 'allExercises',
12 Removed: 'testUser'
13 Removed: ],
14 Removed: #category : 'MyFitnessTracker-Model',
15 Removed: #package : 'MyFitnessTracker-Model'
16 Removed: }
17 Removed:
18 Removed: { #category : 'accessing' }
19 Removed: MFTSQLite3Database class >> allExercises [
20 Removed:
21 Removed: ^ allExercises
22 Removed: ]
23 Removed:
24 Removed: { #category : 'accessing' }
25 Removed: MFTSQLite3Database class >> allMuscleGroups [
26 Removed:
27 Removed: ^ allMuscleGroups
28 Removed: ]
29 Removed:
30 Removed: { #category : 'accessing' }
31 Removed: MFTSQLite3Database class >> allMuscles [
32 Removed:
33 Removed: ^ allMuscles
34 Removed: ]
35 Removed:
36 Removed: { #category : 'accessing' }
37 Removed: MFTSQLite3Database class >> createDefaultDatabaseAt: aLocation [
38 Removed:
39 Removed: | schema command returnCode |
40 Removed: schema := ((IceRepository repositoryNamed: 'my-fitness-tracker')
41 Removed: codeDirectory / 'mft-schema.sql') pathString.
42 Removed: command := 'sqlite3 ' , aLocation , ' < ' , schema.
43 Removed: returnCode := LibC runCommand: command.
44 Removed: returnCode ~= 0 ifTrue: [
45 Removed: self error:
46 Removed: 'Non-zero return code when attempting to create the MFT database.' ]
47 Removed: ]
48 Removed:
49 Removed: { #category : 'as yet unclassified' }
50 Removed: MFTSQLite3Database class >> defaultConnection [
51 Removed:
52 Removed: ^ self newOnDefaultLocation connection
53 Removed: ]
54 Removed:
55 Removed: { #category : 'accessing' }
56 Removed: MFTSQLite3Database class >> defaultLocation [
57 Removed:
58 Removed: ^ defaultLocation
59 Removed: ]
60 Removed:
61 Removed: { #category : 'class initialization' }
62 Removed: MFTSQLite3Database class >> getAllExercises [
63 Removed:
64 Removed: | connection allRows |
65 Removed: connection := self defaultConnection open.
66 Removed: allRows := (connection execute: 'SELECT * FROM Exercises') rows.
67 Removed: connection close.
68 Removed: ^ Array withAll: (allRows collect: [ :row |
69 Removed: MFTExercise newFromDictionary: row asDictionary ])
70 Removed: ]
71 Removed:
72 Removed: { #category : 'class initialization' }
73 Removed: MFTSQLite3Database class >> getAllMuscleGroups [
74 Removed:
75 Removed: | connection allRows |
76 Removed: connection := self defaultConnection open.
77 Removed: allRows := (connection execute: 'SELECT * FROM Muscle_Groups') rows.
78 Removed: connection close.
79 Removed: ^ Array withAll: (allRows collect: [ :row |
80 Removed: MFTMuscleGroup newFromDictionary: row asDictionary ])
81 Removed: ]
82 Removed:
83 Removed: { #category : 'class initialization' }
84 Removed: MFTSQLite3Database class >> getAllMuscles [
85 Removed:
86 Removed: | connection allRows |
87 Removed: connection := self defaultConnection open.
88 Removed: allRows := (connection execute: 'SELECT * FROM Muscles') rows.
89 Removed: connection close.
90 Removed: ^ Array withAll: (allRows collect: [ :row |
91 Removed: MFTMuscle newFromDictionary: row asDictionary ])
92 Removed: ]
93 Removed:
94 Removed: { #category : 'accessing' }
95 Removed: MFTSQLite3Database class >> getAllSetsForUser: aMFTUser connection: openConnection [
96 Removed:
97 Removed: | allSetRows sets |
98 Removed: allSetRows := (openConnection
99 Removed: execute:
100 Removed: 'SELECT s.* FROM Sets s JOIN Workouts w ON s.workout_id = w.id WHERE w.user_id = ?'
101 Removed: value: aMFTUser id) rows.
102 Removed: sets := allSetRows collect: [ :row |
103 Removed: MFTSet newFromDictionary: row asDictionary ].
104 Removed: ^ sets
105 Removed: ]
106 Removed:
107 Removed: { #category : 'accessing' }
108 Removed: MFTSQLite3Database class >> getAllWeightsForUser: aMFTUser connection: openConnection [
109 Removed:
110 Removed: | allWeightRows weights |
111 Removed: allWeightRows := (openConnection
112 Removed: execute: 'SELECT * FROM weights WHERE user_id = ?'
113 Removed: value: aMFTUser id) rows.
114 Removed: weights := allWeightRows collect: [ :row |
115 Removed: MFTWeight newFromDictionary: row asDictionary ].
116 Removed: ^ weights
117 Removed: ]
118 Removed:
119 Removed: { #category : 'accessing' }
120 Removed: MFTSQLite3Database class >> getAllWorkoutsForTestUser [
121 Removed:
122 Removed: | connection workouts |
123 Removed: connection := self defaultConnection open.
124 Removed: workouts := self
125 Removed: getAllWorkoutsForUser: testUser
126 Removed: connection: connection.
127 Removed: connection close.
128 Removed: ^ workouts
129 Removed: ]
130 Removed:
131 Removed: { #category : 'accessing' }
132 Removed: MFTSQLite3Database class >> getAllWorkoutsForUser: aMFTUser connection: openConnection [
133 Removed:
134 Removed: | allWorkoutRows workouts allSets |
135 Removed: allWorkoutRows := (openConnection
136 Removed: execute:
137 Removed: 'SELECT * FROM Workouts WHERE user_id = ?'
138 Removed: value: aMFTUser id) rows.
139 Removed: workouts := allWorkoutRows collect: [ :row |
140 Removed: MFTWorkout newFromDictionary: row asDictionary ].
141 Removed: allSets := self
142 Removed: getAllSetsForUser: aMFTUser
143 Removed: connection: openConnection.
144 Removed: (allSets groupedBy: #workoutId) keysAndValuesDo: [
145 Removed: :workoutId
146 Removed: :workoutSets |
147 Removed: | workout |
148 Removed: workout := workouts detect: [ :w | w id = workoutId ].
149 Removed: (workoutSets groupedBy: #groupId) keysAndValuesDo: [ :groupId :sets |
150 Removed: workout addSetGroup:
151 Removed: (MFTSetGroup new sets:
152 Removed: (sets collect: [ :set | set groupId: groupId ])) ] ].
153 Removed: ^ workouts
154 Removed: ]
155 Removed:
156 Removed: { #category : 'as yet unclassified' }
157 Removed: MFTSQLite3Database class >> getExistingUser: aMFTUser [
158 Removed:
159 Removed: | connection existingUserDict |
160 Removed: connection := self defaultConnection.
161 Removed: connection open.
162 Removed: existingUserDict := ((connection
163 Removed: execute: 'SELECT *
164 Removed: FROM users
165 Removed: WHERE users.username = ?
166 Removed: AND users.password_hash = ?'
167 Removed: with: {
168 Removed: aMFTUser username.
169 Removed: aMFTUser passwordHash }) onlyRow: [
170 Removed: Dictionary new ]) asDictionary.
171 Removed: connection close.
172 Removed: ^ existingUserDict
173 Removed: ifNotEmpty: [ MFTUser newFromDictionary: existingUserDict ]
174 Removed: ifEmpty: [ nil ]
175 Removed: ]
176 Removed:
177 Removed: { #category : 'class initialization' }
178 Removed: MFTSQLite3Database class >> getTestUser [
179 Removed:
180 Removed: | connection testUserDict |
181 Removed: connection := self defaultConnection.
182 Removed: connection open.
183 Removed: testUserDict := (connection execute:
184 Removed: 'SELECT * FROM users WHERE id = 1') onlyRow
185 Removed: asDictionary.
186 Removed: connection close.
187 Removed: ^ MFTUser newFromDictionary: testUserDict
188 Removed: ]
189 Removed:
190 Removed: { #category : 'class initialization' }
191 Removed: MFTSQLite3Database class >> initialize [
192 Removed:
193 Removed: " defaultLocation := (Smalltalk imageDirectory / 'mft.sqlite3') "
194 Removed: " fullName. "
195 Removed: " (FileSystem / defaultLocation) exists ifFalse: [ "
196 Removed: " self createDefaultDatabaseAt: defaultLocation ]. "
197 Removed: " allMuscles := self getAllMuscles. "
198 Removed: " allMuscleGroups := self getAllMuscleGroups. "
199 Removed: " allExercises := self getAllExercises. "
200 Removed: " testUser := self getTestUser "
201 Removed: ]
202 Removed:
203 Removed: { #category : 'instance creation' }
204 Removed: MFTSQLite3Database class >> newOnDefaultLocation [
205 Removed:
206 Removed: ^ self on: defaultLocation
207 Removed: ]
208 Removed:
209 Removed: { #category : 'class initialization' }
210 Removed: MFTSQLite3Database class >> populatePlaceholderWeights [
211 Removed:
212 Removed: | db |
213 Removed: db := self newOnDefaultLocation user: testUser.
214 Removed: db connection open.
215 Removed: db connection execute: 'DELETE FROM Weights'.
216 Removed: MFTWeight placeholderCollection do: [ :weight |
217 Removed: db insertWeight: weight ].
218 Removed: db connection close
219 Removed: ]
220 Removed:
221 Removed: { #category : 'class initialization' }
222 Removed: MFTSQLite3Database class >> populatePlaceholderWorkouts [
223 Removed:
224 Removed: | db |
225 Removed: db := self newOnDefaultLocation user: testUser.
226 Removed: db connection open.
227 Removed: db connection
228 Removed: execute: 'DELETE FROM Workouts';
229 Removed: execute: 'DELETE FROM Sets'.
230 Removed: MFTWorkout placeholderCollection do: [ :workout |
231 Removed: db insertWorkout: workout ].
232 Removed: db connection close
233 Removed: ]
234 Removed:
235 Removed: { #category : 'as yet unclassified' }
236 Removed: MFTSQLite3Database class >> registerNewUser: aMFTUser [
237 Removed:
238 Removed: aMFTUser username ifNotEmpty: [
239 Removed: self defaultConnection
240 Removed: open;
241 Removed: execute:
242 Removed: 'INSERT INTO users(username,password_hash,account_register_date_time)
243 Removed: VALUES (?, ?, ?);'
244 Removed: with: {
245 Removed: aMFTUser username.
246 Removed: aMFTUser passwordHash.
247 Removed: DateAndTime now asUTC rounded };
248 Removed: close ]
249 Removed: ]
250 Removed:
251 Removed: { #category : 'setting' }
252 Removed: MFTSQLite3Database class >> storeProspectEmail: anEmail [
253 Removed:
254 Removed: self defaultConnection
255 Removed: open;
256 Removed: execute: 'INSERT INTO prospects(email,date_time) VALUES (?, ?);'
257 Removed: value: anEmail
258 Removed: value: DateAndTime now asUTC rounded;
259 Removed: close
260 Removed: ]
261 Removed:
262 Removed: { #category : 'accessing' }
263 Removed: MFTSQLite3Database class >> testUser [
264 Removed:
265 Removed: ^ testUser
266 Removed: ]
267 Removed:
268 Removed: { #category : 'as yet unclassified' }
269 Removed: MFTSQLite3Database >> delete: anObject [
270 Removed: "Delete an object from the database, using the appropriate method."
271 Removed:
272 Removed: | methods appropriateMethod |
273 Removed: methods := Dictionary newFrom: {
274 Removed: (MFTWeight -> #deleteWeight:).
275 Removed: (MFTWorkout -> #deleteWorkout:) }.
276 Removed: appropriateMethod := methods at: anObject class ifAbsent: [
277 Removed: ^ self error:
278 Removed: ('No appropriate {1} method for deleting {2}'
279 Removed: format: {
280 Removed: self.
281 Removed: anObject }) ].
282 Removed: self perform: appropriateMethod with: anObject
283 Removed: ]
284 Removed:
285 Removed: { #category : 'as yet unclassified' }
286 Removed: MFTSQLite3Database >> deleteSets: aMFTSetCollection [
287 Removed:
288 Removed: aMFTSetCollection do: [ :set |
289 Removed: connection
290 Removed: execute: 'DELETE FROM Sets WHERE workout_id = ?'
291 Removed: value: set workoutId ]
292 Removed: ]
293 Removed:
294 Removed: { #category : 'as yet unclassified' }
295 Removed: MFTSQLite3Database >> deleteWeight: aMFTWeight [
296 Removed:
297 Removed: connection
298 Removed: execute:
299 Removed: 'DELETE FROM Weights WHERE user_id = ? AND date = ? AND value = ?'
300 Removed: with: {
301 Removed: user id.
302 Removed: aMFTWeight date yyyymmdd.
303 Removed: aMFTWeight value }
304 Removed: ]
305 Removed:
306 Removed: { #category : 'as yet unclassified' }
307 Removed: MFTSQLite3Database >> deleteWorkout: aMFTWorkout [
308 Removed:
309 Removed: self deleteSets: aMFTWorkout sets.
310 Removed: connection
311 Removed: execute: 'DELETE FROM Workouts WHERE user_id = ? AND date = ?'
312 Removed: with: {
313 Removed: user id.
314 Removed: aMFTWorkout date yyyymmdd }
315 Removed: ]
316 Removed:
317 Removed: { #category : 'as yet unclassified' }
318 Removed: MFTSQLite3Database >> getAllUserWeights [
319 Removed:
320 Removed: ^ self class getAllWeightsForUser: user connection: connection
321 Removed: ]
322 Removed:
323 Removed: { #category : 'as yet unclassified' }
324 Removed: MFTSQLite3Database >> getAllUserWorkouts [
325 Removed:
326 Removed: ^ self class getAllWorkoutsForUser: user connection: connection
327 Removed: ]
328 Removed:
329 Removed: { #category : 'accessing' }
330 Removed: MFTSQLite3Database >> insert: anObject [
331 Removed: "Insert an object in the database, using the appropriate method."
332 Removed:
333 Removed: | methods appropriateMethod |
334 Removed: methods := Dictionary newFrom: {
335 Removed: (MFTWeight -> #insertWeight:).
336 Removed: (MFTWorkout -> #insertWorkout:) }.
337 Removed: appropriateMethod := methods at: anObject class ifAbsent: [
338 Removed: ^ self error:
339 Removed: ('No appropriate {1} method for inserting {2}'
340 Removed: format: {
341 Removed: self.
342 Removed: anObject }) ].
343 Removed:
344 Removed: self perform: appropriateMethod with: anObject
345 Removed: ]
346 Removed:
347 Removed: { #category : 'as yet unclassified' }
348 Removed: MFTSQLite3Database >> insertSet: aMFTSet forWorkout: aMFTWorkout [
349 Removed:
350 Removed: connection
351 Removed: execute:
352 Removed: 'INSERT INTO Sets ("workout_id","exercise_id", "set_group", "set_number", "reps", "load", "rpe", "rest_after")
353 Removed: VALUES(?, ?, ?, ?, ?, ?, ?, ?)'
354 Removed: with: {
355 Removed: aMFTWorkout id.
356 Removed: aMFTSet exerciseId.
357 Removed: aMFTSet groupId.
358 Removed: aMFTSet number.
359 Removed: aMFTSet reps.
360 Removed: aMFTSet load.
361 Removed: aMFTSet rpe.
362 Removed: aMFTSet restAfter }
363 Removed: ]
364 Removed:
365 Removed: { #category : 'as yet unclassified' }
366 Removed: MFTSQLite3Database >> insertSets: aMFTSetCollection forWorkout: aMFTWorkout [
367 Removed:
368 Removed: aMFTSetCollection do: [ :set |
369 Removed: self insertSet: set forWorkout: aMFTWorkout ]
370 Removed: ]
371 Removed:
372 Removed: { #category : 'as yet unclassified' }
373 Removed: MFTSQLite3Database >> insertWeight: aMFTWeight [
374 Removed:
375 Removed: connection
376 Removed: execute: 'INSERT INTO weights(user_id, date, value)
377 Removed: VALUES(?, ?, ?)'
378 Removed: with: {
379 Removed: user id.
380 Removed: aMFTWeight date yyyymmdd.
381 Removed: aMFTWeight value }
382 Removed: ]
383 Removed:
384 Removed: { #category : 'as yet unclassified' }
385 Removed: MFTSQLite3Database >> insertWorkout: aMFTWorkout [
386 Removed:
387 Removed: | workoutId |
388 Removed: connection beginTransaction.
389 Removed: connection
390 Removed: execute:
391 Removed: 'INSERT INTO Workouts ("user_id", "date", "primary_muscle_group_id") VALUES(?, ?, ?)'
392 Removed: with: {
393 Removed: user id.
394 Removed: aMFTWorkout date yyyymmdd.
395 Removed: aMFTWorkout primaryMuscleGroupId }.
396 Removed: workoutId := (connection
397 Removed: execute: 'SELECT id
398 Removed: FROM workouts
399 Removed: WHERE user_id = ?
400 Removed: AND date = ?
401 Removed: AND primary_muscle_group_id = ?'
402 Removed: with: {
403 Removed: user id.
404 Removed: aMFTWorkout date yyyymmdd.
405 Removed: aMFTWorkout primaryMuscleGroupId }) onlyValue.
406 Removed: self insertSets: aMFTWorkout sets forWorkout: aMFTWorkout.
407 Removed: connection commitTransaction
408 Removed: ]
409 Removed:
410 Removed: { #category : 'as yet unclassified' }
411 Removed: MFTSQLite3Database >> login: aMFTUser atDateAndTime: aDateAndTime [
412 Removed:
413 Removed: self user: aMFTUser.
414 Removed: connection
415 Removed: execute: 'UPDATE users
416 Removed: SET last_login_date_time = ?
417 Removed: WHERE id = ?'
418 Removed: with: {
419 Removed: aDateAndTime asString.
420 Removed: user id }
421 Removed: ]
422 Removed:
423 Removed: { #category : 'as yet unclassified' }
424 Removed: MFTSQLite3Database >> update: oldObject with: newObject [
425 Removed: "Update an object in the database, using the appropriate method."
426 Removed:
427 Removed: | methods appropriateMethod |
428 Removed: methods := Dictionary newFrom: {
429 Removed: (MFTWeight -> #updateWeight:with:).
430 Removed: (MFTWorkout -> #updateWorkout:with:).
431 Removed: (MFTUser -> #updateUser:with:) }.
432 Removed: appropriateMethod := methods at: oldObject class ifAbsent: [
433 Removed: ^ self error:
434 Removed: ('No appropriate {1} method for updating {2}'
435 Removed: format: {
436 Removed: self.
437 Removed: oldObject }) ].
438 Removed: self perform: appropriateMethod with: oldObject with: newObject
439 Removed: ]
440 Removed:
441 Removed: { #category : 'as yet unclassified' }
442 Removed: MFTSQLite3Database >> updateUserWith: newMFTUser [
443 Removed:
444 Removed: connection
445 Removed: execute: 'UPDATE users
446 Removed: SET username = ?,
447 Removed: password_hash = ?,
448 Removed: date_of_birth = ?,
449 Removed: real_first_name = ?,
450 Removed: real_last_name = ?
451 Removed: WHERE id = ?'
452 Removed: with: {
453 Removed: newMFTUser username.
454 Removed: newMFTUser passwordHash.
455 Removed: newMFTUser dateOfBirth.
456 Removed: newMFTUser realFirstName.
457 Removed: newMFTUser realLastName.
458 Removed: user id }
459 Removed: ]
460 Removed:
461 Removed: { #category : 'as yet unclassified' }
462 Removed: MFTSQLite3Database >> updateWeight: oldMFTWeight with: newMFTWeight [
463 Removed:
464 Removed: connection
465 Removed: execute: 'UPDATE weights
466 Removed: SET date = ?,
467 Removed: value = ?
468 Removed: WHERE user_id = ?
469 Removed: AND date = ?
470 Removed: AND value = ?'
471 Removed: with: {
472 Removed: newMFTWeight date yyyymmdd.
473 Removed: newMFTWeight value.
474 Removed: user id.
475 Removed: oldMFTWeight date yyyymmdd.
476 Removed: oldMFTWeight value }
477 Removed: ]
478 Removed:
479 Removed: { #category : 'as yet unclassified' }
480 Removed: MFTSQLite3Database >> updateWorkout: oldMFTWorkout with: newMFTWorkout [
481 Removed: "We first obtain the workoutId to later replace the associated workout's exercises."
482 Removed:
483 Removed: | workoutId |
484 Removed: workoutId := (connection
485 Removed: execute: 'SELECT id
486 Removed: FROM workouts
487 Removed: WHERE user_id = ?
488 Removed: AND date = ?
489 Removed: AND primary_muscle = ?
490 Removed: AND secondary_muscles = ?'
491 Removed: with: {
492 Removed: user id.
493 Removed: oldMFTWorkout date yyyymmdd.
494 Removed: oldMFTWorkout primaryMuscle englishName.
495 Removed: (oldMFTWorkout secondaryMuscles collect:
496 Removed: #englishName) asCommaString }) onlyValue.
497 Removed: connection
498 Removed: execute: 'UPDATE workouts
499 Removed: SET date = ?,
500 Removed: primary_muscle = ?,
501 Removed: secondary_muscles = ?
502 Removed: WHERE id = ?'
503 Removed: with: {
504 Removed: newMFTWorkout date yyyymmdd.
505 Removed: newMFTWorkout primaryMuscle englishName.
506 Removed: (newMFTWorkout secondaryMuscles collect: #englishName)
507 Removed: asCommaString.
508 Removed: workoutId }.
509 Removed: self deleteSetsForWorkoutId: workoutId.
510 Removed: newMFTWorkout exercises do: [ :exercise |
511 Removed: self insertExercise: exercise forWorkoutId: workoutId ]
512 Removed: ]
513 Removed:
514 Removed: { #category : 'accessing' }
515 Removed: MFTSQLite3Database >> user [
516 Removed:
517 Removed: ^ user
518 Removed: ]
519 Removed:
520 Removed: { #category : 'accessing' }
521 Removed: MFTSQLite3Database >> user: aMFTUser [
522 Removed:
523 Removed: user := aMFTUser
524 Removed: ]
src/MyFitnessTracker-Model/ManifestMyFitnessTrackerModel.class.st
index 00000000..59fb126a 000000..100644
@@ -0,0 +1,10 @@
1 Added: "
2 Added: Please describe the package using the class comment of the included manifest class. The manifest class also includes other additional metadata for the package. These meta data are used by other tools such as the SmalllintManifestChecker and the critics Browser
3 Added: "
4 Added: Class {
5 Added: #name : 'ManifestMyFitnessTrackerModel',
6 Added: #superclass : 'PackageManifest',
7 Added: #category : 'MyFitnessTracker-Model-Manifest',
8 Added: #package : 'MyFitnessTracker-Model',
9 Added: #tag : 'Manifest'
10 Added: }