diff options
author | Tim <contact@bytim.eu> | 2025-05-16 16:45:13 +0200 |
---|---|---|
committer | Tim <contact@bytim.eu> | 2025-05-16 16:45:13 +0200 |
commit | d658c185d0c56a72b062a234982c5d1f8da49c1c (patch) | |
tree | 68d6f9b10437f59fe4ab3477c8d9cadc7ba07cf1 /src/chef/pages/admin | |
parent | 8cb2c95d253f0a0c1216ac396288f38c238e6b13 (diff) | |
download | chef-d658c185d0c56a72b062a234982c5d1f8da49c1c.tar.xz chef-d658c185d0c56a72b062a234982c5d1f8da49c1c.zip |
Add feature to delete categories
Diffstat (limited to 'src/chef/pages/admin')
-rw-r--r-- | src/chef/pages/admin/api.clj | 25 |
1 files changed, 25 insertions, 0 deletions
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.")))) |