]> git.ekhem.eu.org Git - gym.git/commitdiff
Simplify insertion of new elements.
authorJakub Czajka <jakub@ekhem.eu.org>
Sun, 7 Jan 2024 12:20:42 +0000 (13:20 +0100)
committerJakub Czajka <jakub@ekhem.eu.org>
Sun, 7 Jan 2024 12:20:42 +0000 (13:20 +0100)
insert.sh

index c0a3954a59d56984de92ae27e6ac08844101c20c..097e5aab720c323749d8eb534a41ec5e32b314bf 100755 (executable)
--- a/insert.sh
+++ b/insert.sh
@@ -18,6 +18,22 @@ query_db() {
     --no-align --command="${1}"
 }
 
+insert_into() {
+  query_db "\
+  WITH new_id AS (
+    INSERT INTO ${1} (name)
+    VALUES ('${2}')
+    ON CONFLICT DO NOTHING
+    RETURNING id
+  )
+  SELECT *
+  FROM new_id
+  UNION
+  SELECT id
+  FROM ${1}
+  WHERE name='${2}'"
+}
+
 echo "HTTP/1.1 200 OK"
 echo "Content-Type: text/html"
 echo "
@@ -37,30 +53,12 @@ echo "
 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}'")
-
+    id=$(insert_into "categories" "${category}")
     echo "Recorded new category '${category}' (id=${id})."
   ;;
   exercise)
     exercise=$(get_query_param exercise)
-
-    query_db "\
-    INSERT INTO exercises (name)
-    VALUES ('${exercise}')"
-
-    id=$(query_db "\
-    SELECT id
-    FROM exercises
-    WHERE name='${exercise}'")
-
+    id=$(insert_into "exercises" "${exercise}")
     echo "Recorded new exercise '${exercise}' (id=${id})."
   ;;
   exercise_category)
@@ -82,16 +80,7 @@ case ${RECORD_TYPE} in
   ;;
   gym)
     gym=$(get_query_param gym)
-
-    query_db "\
-    INSERT INTO gyms (name)
-    VALUES ('${gym}')"
-
-    id=$(query_db "\
-    SELECT id
-    FROM gyms
-    WHERE name='${gym}'")
-
+    id=$(insert_into "gyms" "${gym}")
     echo "Recorded new gym '${gym}' (id=${id})."
   ;;
   workout)