package workout import ( "api/middleware" "api/utils" "database/sql" "net/http" "strconv" "time" "firebase.google.com/go/auth" ) func NewWorkout(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var dateStr = r.FormValue("date") var typeStr = r.FormValue("type") var setsStr = r.FormValue("sets") var repsStr = r.FormValue("reps") if dateStr == "" || typeStr == "" || setsStr == "" || repsStr == "" { http.Error(w, "Missing required fields", http.StatusBadRequest) return } date, err := time.Parse("2006-01-02", dateStr) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } sets, err := strconv.Atoi(setsStr) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } reps, err := strconv.Atoi(repsStr) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token) _, err = db.Exec("INSERT INTO workout (user_id, date, type, sets, reps) VALUES (?, ?, ?, ?, ?)", token.UID, date, typeStr, sets, reps) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } } func GetWorkouts(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token) var userId = token.UID rows, err := db.Query("SELECT date, type, sets, reps FROM workout WHERE user_id = ?", userId) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } var workouts = make([]map[string]interface{}, 0) for rows.Next() { var date string var workoutType string var sets int var reps int err = rows.Scan(&date, &workoutType, &sets, &reps) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } workout := map[string]interface{}{ "date": date, "type": workoutType, "sets": sets, "reps": reps, } workouts = append(workouts, workout) } utils.WriteJSON(w, workouts) } }