11package models
22
33import (
4- // "database/sql"
4+ "database/sql"
55 "errors"
66 "fitness_app/defs"
77 "log"
@@ -20,11 +20,12 @@ type WorkoutTrack struct {
2020}
2121
2222type TrackData struct {
23- Id int `json:"id"`
24- ExDayId int `json:"ex_day_id"`
25- Weight float32 `json:"weight"`
26- SetNum int `json:"set_num"`
27- RepNum int `json:"rep_num"`
23+ Id int `json:"id"`
24+ ExDayId int `json:"ex_day_id"`
25+ Weight float32 `json:"weight"`
26+ SetNum int `json:"set_num"`
27+ RepNum int `json:"rep_num"`
28+ TimeRecorded sql.NullTime `json:"time_recorded"`
2829}
2930
3031func (Db * DataBase ) CreateWorkoutTrack (wt * WorkoutTrack ) (int , error ) {
@@ -235,41 +236,6 @@ func (Db *DataBase) UpdateWorkoutTrackPrivacy(wt *WorkoutTrack) (bool, error) {
235236 return true , nil
236237}
237238
238- // func (Db *DataBase) CreateTrackData(td *TrackData) (int, error) {
239- //
240- // if td.Track <= 1 {
241- // return 0, errors.New("Invalid workout plan used in track")
242- // }
243- //
244- // if td.ExDay <= 0 {
245- // return 0, errors.New("Invalid user used in track")
246- // }
247- //
248- // statement := "insert into workout_track_data (track, ex_day, weight, set_num) values (?, ?, ?, ?) returning id"
249- // var stmt *sql.Stmt
250- // stmt, err := Db.Data.Prepare(statement)
251- // if err != nil {
252- // return 0, err
253- // }
254- //
255- // defer stmt.Close()
256- //
257- // var track_data_id int
258- //
259- // err = stmt.QueryRow(
260- // td.Track,
261- // td.ExDay,
262- // td.Weight,
263- // td.SetNum,
264- // ).Scan(&track_data_id)
265- //
266- // if err != nil {
267- // return 0, err
268- // }
269- //
270- // return track_data_id, nil
271- // }
272-
273239func (Db * DataBase ) CreateTrackDataForTrack (wt * WorkoutTrack ) error {
274240
275241 if wt .Plan .Id <= defs .PLACEHOLDER_PLAN_ID {
@@ -310,7 +276,7 @@ func (Db *DataBase) CreateTrackDataForTrack(wt *WorkoutTrack) error {
310276
311277func (Db * DataBase ) ReadTrackDataForTrack (wt_id int ) ([]TrackData , error ) {
312278 query_str := `
313- select workout_track_data.id, ex_day, workout_track_data.weight, set_num, rep_num
279+ select workout_track_data.id, ex_day, workout_track_data.weight, set_num, rep_num, time_recorded
314280 from workout_track_data inner join exercise_day on ex_day = exercise_day.id
315281 where track = ?
316282 order by day_order asc, exercise_order asc
@@ -334,6 +300,7 @@ func (Db *DataBase) ReadTrackDataForTrack(wt_id int) ([]TrackData, error) {
334300 & td .Weight ,
335301 & td .SetNum ,
336302 & td .RepNum ,
303+ & td .TimeRecorded ,
337304 )
338305 if err != nil {
339306 return nil , err
@@ -345,23 +312,49 @@ func (Db *DataBase) ReadTrackDataForTrack(wt_id int) ([]TrackData, error) {
345312 return data , nil
346313}
347314
348- // func (Db *DataBase) UpdateTrackData(td *TrackData) (bool, error) {
349- //
350- // statement := "UPDATE workout_track_data SET weight = ?, rep_num = ? WHERE id = ?"
351- // stmt, err := Db.Data.Prepare(statement)
352- // if err != nil {
353- // return false, err
354- // }
355- //
356- // defer stmt.Close()
357- //
358- // _, err = stmt.Exec(td.Weight, td.RepNum, td.Id)
359- // if err != nil {
360- // return false, err
361- // }
362- //
363- // return true, nil
364- // }
315+ func (Db * DataBase ) GetAllDataForExerciseAndUser (user_id , exercise_id int ) ([]* TrackData , error ) {
316+ query := `
317+ select wtd.weight, wtd.set_num, wtd.rep_num, wtd.time_recorded
318+ from workout_track_data wtd inner join workout_track wt on wt.id = wtd.track inner join exercise_day ed on wtd.ex_day = ed.id
319+ where wt.usr = ? and ed.exercise = ? and wtd.time_recorded is not null
320+ order by wt.workout_date asc, wtd.time_recorded asc, wtd.set_num asc
321+ `
322+ rows , err := Db .Data .Query (query , user_id , exercise_id )
323+ if err != nil {
324+ return nil , err
325+ }
326+
327+ defer rows .Close ()
328+
329+ res := make ([]* TrackData , 0 )
330+
331+ for rows .Next () {
332+ tmp := & TrackData {}
333+ err = rows .Scan (
334+ & tmp .Weight ,
335+ & tmp .SetNum ,
336+ & tmp .RepNum ,
337+ & tmp .TimeRecorded ,
338+ )
339+
340+ if err != nil {
341+ return nil , err
342+ }
343+
344+ res = append (res , tmp )
345+ }
346+
347+ return res , nil
348+ }
349+
350+ func CalcExerciseProgressFromTrackData (data []* TrackData ) ([]float32 , error ) { // TODO: implement
351+
352+ for td := range data {
353+ _ = td
354+ }
355+
356+ return nil , nil
357+ }
365358
366359func (Db * DataBase ) UpdateMultipleTrackData (tds []TrackData ) (bool , error ) {
367360
@@ -376,15 +369,27 @@ func (Db *DataBase) UpdateMultipleTrackData(tds []TrackData) (bool, error) {
376369
377370 defer tx .Rollback ()
378371
379- stmt , err := tx .Prepare ("UPDATE workout_track_data SET weight = ?, rep_num = ? WHERE id = ?" )
372+ statement := `
373+ update workout_track_data
374+ set
375+ weight = ?,
376+ rep_num = ?,
377+ time_recorded = case
378+ when time_recorded is null then ?
379+ else time_recorded
380+ end
381+ where id = ?
382+ `
383+
384+ stmt , err := tx .Prepare (statement )
380385 if err != nil {
381386 return false , err
382387 }
383388
384389 defer stmt .Close ()
385390
386391 for _ , td := range tds {
387- _ , err = stmt .Exec (td .Weight , td .RepNum , td .Id )
392+ _ , err = stmt .Exec (td .Weight , td .RepNum , time . Now (), td .Id )
388393 if err != nil {
389394 return false , err
390395 }
0 commit comments