From d658c185d0c56a72b062a234982c5d1f8da49c1c Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 16 May 2025 16:45:13 +0200 Subject: Add feature to delete categories --- src/chef/pages/admin.clj | 5 +++++ src/chef/pages/admin/api.clj | 25 +++++++++++++++++++++++++ src/chef/routes.clj | 3 ++- 3 files changed, 32 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/chef/pages/admin.clj b/src/chef/pages/admin.clj index 73cf127..83e5dbd 100644 --- a/src/chef/pages/admin.clj +++ b/src/chef/pages/admin.clj @@ -25,6 +25,11 @@ :hx-post (str "/api/admin/create-category" (when (some? data) (str "?parent=" (:categories/id data)))) :hx-swap "none"}] + [:img {:src "/static/icons/trash.svg" :height "30em" + :style {:vertical-align :middle + :margin-left "1em"} + :hx-delete (str "/api/admin/delete-category/" (:categories/id data)) + :hx-swap "none"}] [:ul (for [child children] (render-category child (->> (sql/format {:select [:*] diff --git a/src/chef/pages/admin/api.clj b/src/chef/pages/admin/api.clj index 0d1910a..a15b897 100644 --- a/src/chef/pages/admin/api.clj +++ b/src/chef/pages/admin/api.clj @@ -14,3 +14,28 @@ {:parent parent}))]})) (-> (ruresp/created "Created.") (ruresp/header "HX-Refresh" "true")))) + +(defn- delete-category-children! [id] + (let [children (->> (sql/format {:select [:*] + :from [:categories] + :where [:= :parent id]}) + (jdbc/execute! @cdb/db) + (map #(:categories/id %)))] + (doseq [child children] + (jdbc/execute! @cdb/db + (sql/format {:delete-from [:categories] + :where [:= :id child]})) + (delete-category-children! child)))) + +(defn delete-category [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 [:categories] + :where [:= :id id]})) + (delete-category-children! id) + (-> (ruresp/response "Deleted.") + (ruresp/status 200) + (ruresp/header "HX-Refresh" "true"))) + (ruresp/bad-request "Bad request.")))) diff --git a/src/chef/routes.clj b/src/chef/routes.clj index 8ade8d1..fe568cc 100644 --- a/src/chef/routes.clj +++ b/src/chef/routes.clj @@ -22,7 +22,8 @@ ["/api" ["/admin" - ["/create-category" {:post {:handler cpaapi/create-category}}]]]]) + ["/create-category" {:post {:handler cpaapi/create-category}}] + ["/delete-category/:id" {:delete {:handler cpaapi/delete-category}}]]]]) (def ring-handler (delay (-> router rring/router -- cgit v1.2.3