diff --git a/handler.go b/handler.go index d6c28ac..7098725 100644 --- a/handler.go +++ b/handler.go @@ -19,7 +19,7 @@ func getHandler(db *sql.DB) http.Handler { router.HandleFunc("/app", service.HandleWorkoutPage(db)) router.HandleFunc("POST /api/workout", service.HandleNewWorkout(db)) router.HandleFunc("GET /api/workout", service.HandleGetWorkouts(db)) - router.HandleFunc("DELETE /api/workout", service.HandleDeleteWorkout(db)) + router.HandleFunc("DELETE /api/workout/{id}", service.HandleDeleteWorkout(db)) router.HandleFunc("/auth/signin", service.HandleSignInPage(db)) router.HandleFunc("/auth/signup", service.HandleSignUpPage(db)) diff --git a/service/workout.go b/service/workout.go index edb0b2a..c0a6a78 100644 --- a/service/workout.go +++ b/service/workout.go @@ -25,7 +25,8 @@ var ( func HandleWorkoutPage(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - inner := workout.WorkoutComp() + currentDate := time.Now().Format("2006-01-02") + inner := workout.WorkoutComp(currentDate) user_comp := UserInfoComp(verifySessionAndReturnUser(db, r)) layout := template.Layout(inner, user_comp) layout.Render(r.Context(), w) @@ -36,6 +37,12 @@ func HandleNewWorkout(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { metrics.WithLabelValues("new").Inc() + user := verifySessionAndReturnUser(db, r) + if user == nil { + http.Error(w, "Unauthorized", http.StatusUnauthorized) + return + } + var dateStr = r.FormValue("date") var typeStr = r.FormValue("type") var setsStr = r.FormValue("sets") @@ -64,15 +71,21 @@ func HandleNewWorkout(db *sql.DB) http.HandlerFunc { return } - //TODO: Ensure auth - // token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token) - - _, err = db.Exec("INSERT INTO workout (user_id, date, type, sets, reps) VALUES (?, ?, ?, ?, ?)", "", date, typeStr, sets, reps) + _, err = db.Exec("INSERT INTO workout (user_id, date, type, sets, reps) VALUES (?, ?, ?, ?, ?)", user.user_uuid, date, typeStr, sets, reps) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } + + wo := workout.Workout{ + Date: r.FormValue("date"), + Type: r.FormValue("type"), + Sets: r.FormValue("sets"), + Reps: r.FormValue("reps"), + } + + workout.WorkoutItemComp(wo, true).Render(r.Context(), w) } } @@ -113,20 +126,29 @@ func HandleDeleteWorkout(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { metrics.WithLabelValues("delete").Inc() - // token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token) - // var userId = token.UID - var userId = "" + user := verifySessionAndReturnUser(db, r) - rowId := r.FormValue("id") + rowId := r.PathValue("id") if rowId == "" { http.Error(w, "Missing required fields", http.StatusBadRequest) return } - _, err := db.Exec("DELETE FROM workout WHERE user_id = ? AND rowid = ?", userId, rowId) + res, err := db.Exec("DELETE FROM workout WHERE user_id = ? AND rowid = ?", user.user_uuid, rowId) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } + + rows, err := res.RowsAffected() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if rows == 0 { + http.Error(w, "Not found", http.StatusNotFound) + return + } } } diff --git a/template/workout/workout.templ b/template/workout/workout.templ index 7603ad7..5f4ca57 100644 --- a/template/workout/workout.templ +++ b/template/workout/workout.templ @@ -1,17 +1,19 @@ package workout -templ WorkoutComp() { +templ WorkoutComp(currentDate string) {

Track your workout