]> git.ekhem.eu.org Git - gym.git/commitdiff
Allow creating new exercise categories and associating them with exercises.
authorJakub Czajka <jakub@ekhem.eu.org>
Sat, 6 Jan 2024 14:03:55 +0000 (15:03 +0100)
committerJakub Czajka <jakub@ekhem.eu.org>
Sat, 6 Jan 2024 14:58:48 +0000 (15:58 +0100)
gym.conf
gym.sh
insert.sh

index da5ba1f9af4fb33d1674e39acbfa00cf429fe211..6d7f3182f45742260ef6e3b2698efc06f9bd764e 100644 (file)
--- a/gym.conf
+++ b/gym.conf
@@ -1,4 +1,4 @@
-# Copyright (c) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+# Copyright (c) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
 # License: GPL-3.0 or later.
 
 server {
@@ -23,7 +23,7 @@ server {
         fastcgi_param SCRIPT_FILENAME ${dollar}document_root/record.sh;
     }
 
-    location ~ ^/(exercise|gym|workout)$ {
+    location ~ ^/(category|exercise|exercise_category|gym|workout)$ {
         include fastcgi_params;
         fastcgi_pass unix:/var/run/fcgiwrap.socket;
         fastcgi_param RECORD_TYPE ${dollar}1;
diff --git a/gym.sh b/gym.sh
index 118c6193f77ccdabeac7a63355a60992afa61ff8..acdfabb4a754c3c94d670f2c6b3c522d00d1eeee 100755 (executable)
--- a/gym.sh
+++ b/gym.sh
@@ -1,11 +1,17 @@
 #!/bin/sh
-# Copyright (c) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+# Copyright (c) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
 # License: GPL-3.0 or later.
 
 . /etc/environment
 
-gyms=$(/usr/bin/psql --user=gym_tracker --dbname="${GYM_DB}" --tuples-only \
-  --no-align --command="SELECT name FROM gyms")
+query_db() {
+  /usr/bin/psql --user=gym_tracker --dbname="${GYM_DB}" --tuples-only \
+    --no-align --command="${1}"
+}
+
+exercises=$(query_db "SELECT name FROM exercises ORDER BY ID")
+gyms=$(query_db "SELECT name FROM gyms ORDER BY id")
+categories=$(query_db "SELECT name FROM categories ORDER BY id")
 
 format_as() {
   xargs --replace={} echo "${1}"
@@ -58,6 +64,29 @@ PAGE="
       <button type='submit'>Add</button>
     </fieldset>
   </form>
+
+  <form action='/category' method='post'>
+    <fieldset>
+      <legend>New exercise category</legend>
+      <input type='text' name='category' placeholder='--Category--' required />
+      <button type='submit'>Add</button>
+    </fieldset>
+  </form>
+
+  <form action='/exercise_category' method='post'>
+    <fieldset>
+      <legend>Associate exercise with category</legend>
+      <select id='exercise' name='exercise'>
+        <option value=''>--Select exercise--</option>
+        $(echo "${exercises}" | format_as "<option value='{}'>{}</option>")
+      </select>
+      <select id='category' name='category'>
+        <option value=''>--Select category--</option>
+        $(echo "${categories}" | format_as "<option value='{}'>{}</option>")
+      </select>
+      <button type='submit'>Associate</button>
+    </fieldset>
+  </form>
 </body>
 </html>"
 
index aba0fac3c464863cba63bdbf6ba9cbdc88fecd3a..c0a3954a59d56984de92ae27e6ac08844101c20c 100755 (executable)
--- a/insert.sh
+++ b/insert.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright (c) 2023 Jakub Czajka <jakub@ekhem.eu.org>
+# Copyright (c) 2023-2024 Jakub Czajka <jakub@ekhem.eu.org>
 # License: GPL-3.0 or later.
 
 . /etc/environment
@@ -35,6 +35,20 @@ echo "
 <body>"
 
 case ${RECORD_TYPE} in
+  category)
+    category=$(get_query_param category)
+
+    query_db "\
+    INSERT INTO categories (name)
+    VALUES ('${category}')"
+
+    id=$(query_db "\
+    SELECT id
+    FROM categories
+    WHERE name='${category}'")
+
+    echo "Recorded new category '${category}' (id=${id})."
+  ;;
   exercise)
     exercise=$(get_query_param exercise)
 
@@ -49,6 +63,23 @@ case ${RECORD_TYPE} in
 
     echo "Recorded new exercise '${exercise}' (id=${id})."
   ;;
+  exercise_category)
+    category=$(get_query_param category)
+    exercise=$(get_query_param exercise)
+
+    category_id=$(query_db "\
+    SELECT id
+    FROM categories
+    WHERE name='${category}'")
+
+    exercise_id=$(query_db "\
+    SELECT id
+    FROM exercises
+    WHERE name='${exercise}'")
+
+    echo "Associated exercise '${exercise}' (id=${exercise_id}) with category\
+ ${category} (id=${category_id})."
+  ;;
   gym)
     gym=$(get_query_param gym)