From: Jakub Czajka Date: Sun, 17 Dec 2023 21:06:47 +0000 (+0100) Subject: Add a script for inserting exercise/gym/workout to the database. X-Git-Url: https://git.ekhem.eu.org/?a=commitdiff_plain;h=d02ab46d6cdbd9d93e0f934e4b8651d4b0d988de;p=gym.git Add a script for inserting exercise/gym/workout to the database. --- diff --git a/insert.sh b/insert.sh new file mode 100755 index 0000000..a5e2817 --- /dev/null +++ b/insert.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# Copyright (c) 2023 Jakub Czajka +# License: GPL-3.0 or later. + +. /etc/environment + +request_body=$(echo "${REQUEST_BODY}" | /usr/bin/python3 -c "\ +import sys; +from urllib.parse import unquote_plus; +print(unquote_plus(sys.stdin.read()));") + +get_query_param() { + echo "${request_body}" | sed "s/^.*${1}=// ; s/\&.*$//" +} + +query_db() { + /usr/bin/psql --user=gym_tracker --dbname="${GYM_DB}" --tuples-only \ + --no-align --command="${1}" +} + +echo "HTTP/1.1 200 OK" +echo "Content-Type: text/html" +echo " + + + + + +" + +case ${RECORD_TYPE} in + exercise) + exercise=$(get_query_param exercise) + + query_db "\ + INSERT INTO exercises (name) + VALUES ('${exercise}')" + + id=$(query_db "\ + SELECT id + FROM exercises + WHERE name='${exercise}'") + + echo "Recorded new exercise '${exercise}' (id=${id})." + ;; + gym) + gym=$(get_query_param gym) + + query_db "\ + INSERT INTO gyms (name) + VALUES ('${gym}')" + + id=$(query_db "\ + SELECT id + FROM gyms + WHERE name='${gym}'") + + echo "Recorded new gym '${gym}' (id=${id})." + ;; + workout) + gym=$(get_query_param gym) + date=$(get_query_param date) + duration=$(get_query_param duration) + + query_db "\ + INSERT INTO workouts (date, duration_min) + VALUES ('${date}', '${duration}')" + + id=$(query_db "\ + SELECT id + FROM workouts + WHERE date='${date}'") + + echo "Recorded new workout on ${date} with duration ${duration} (id=${id})." + + gym_id=$(query_db "\ + SELECT id + FROM gyms + WHERE name='${gym}'") + + query_db "\ + INSERT INTO workouts_gyms (workout_id, gym_id) + VALUES ('${id}', '${gym_id}')" + + echo "Associated workout (id=${id}) with gym ${gym} (id=${gym_id})." + + echo "${request_body}&" | while IFS='=' read -r -d '&' key val + do + # $exercise, $exercise_id and $value retain their values between + # iterations. + [ -n "${val}" ] && case ${key} in + *_local_record) + query_db "\ + INSERT INTO gyms_records (gym_id, exercise_id, value) + VALUES ('${gym_id}', '${exercise_id}', '${value}') + ON CONFLICT (gym_id, exercise_id) + DO UPDATE SET value='${value}'" + + echo "Recorded new record for '${exercise}' (id=${exercise_id}) in\ + ${gym} (id=${gym_id}) (value=${value})." + ;; + *_global_record) + query_db "\ + INSERT INTO records (exercise_id, value) + VALUES ('${exercise_id}', '${value}') + ON CONFLICT (exercise_id) + DO UPDATE SET value='${value}'" + + echo "Recorded new global record for '${exercise}'\ + (id=${exercise_id}) (value=${value})." + ;; + [0-9]*) + exercise_id="${key}" + value="${val}" + + query_db "\ + INSERT INTO workouts_exercises (workout_id, exercise_id, value) + VALUES ('${id}', '${exercise_id}', '${value}')" + + exercise=$(query_db "\ + SELECT name + FROM exercises + WHERE id='${exercise_id}'") + echo "Recorded exercise '${exercise}' (id=${exercise_id}) for workout\ + (id=${id}) (value=${value})." + ;; + esac + done + ;; +esac + +echo " + +"