From ea7b0078478ba7925f2db3cb1fa038e8a3d85ab8 Mon Sep 17 00:00:00 2001
From: Tim <contact@bytim.eu>
Date: Fri, 30 May 2025 17:09:57 +0200
Subject: Add features to manage recipes in admin interface

---
 src/chef/pages/admin/api.clj | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

(limited to 'src/chef/pages/admin/api.clj')

diff --git a/src/chef/pages/admin/api.clj b/src/chef/pages/admin/api.clj
index ff11672..8b2723a 100644
--- a/src/chef/pages/admin/api.clj
+++ b/src/chef/pages/admin/api.clj
@@ -37,7 +37,6 @@
                                                         :where       [:= :id id]}))
                             (delete-category-children! id)
                             (-> (ruresp/response "Deleted.")
-                                (ruresp/status 200)
                                 (ruresp/header "HX-Refresh" "true"))))
                       (ruresp/bad-request "Bad request."))))
 
@@ -55,3 +54,38 @@
                                                                 :where  [:= :id id]})))
                           (ruresp/response "Updated."))
                       (ruresp/bad-request "Bad request."))))
+
+(defn create-recipe [req]
+  (cutils/auth-only req
+                    (jdbc/execute! @cdb/db
+                                   (sql/format {:insert-into [:recipes]
+                                                :values      [{:title "New recipe"}]}))
+                    (-> (ruresp/created "Created.")
+                        (ruresp/header "HX-Refresh" "true"))))
+
+(defn delete-recipe [req]
+  (cutils/auth-only req
+                    (if-let [id (try (Integer/parseInt (get-in req [:path-params :id]))
+                                     (catch Exception _ nil))]
+                      (do (jdbc/execute! @cdb/db
+                                         (sql/format {:delete-from [:recipes]
+                                                      :where       [:= :id id]}))
+                          (-> (ruresp/response "Deleted.")
+                              (ruresp/header "HX-Refresh" "true")))
+                      (ruresp/bad-request "Bad request."))))
+
+;;TODO: validate request
+(defn edit-recipe [req]
+  (cutils/auth-only req
+                    (if-let [id (try (Integer/parseInt (get-in req [:path-params :id]))
+                                     (catch Exception _ nil))]
+                      (do (jdbc/execute! @cdb/db
+                                         (sql/format {:update :recipes
+                                                      :set    {:title       (get-in req [:params "title"])
+                                                               :category    (get-in req [:params "category"])
+                                                               :unit        (get-in req [:params "ingredients-unit"])
+                                                               :ingredients (get-in req [:params "ingredients"])
+                                                               :preparation (get-in req [:params "preparation"])}
+                                                      :where  [:= :id id]}))
+                          (ruresp/response "Saved."))
+                      (ruresp/bad-request "Bad request."))))
-- 
cgit v1.2.3