summaryrefslogtreecommitdiff
path: root/src/chef/pages/admin/api.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/chef/pages/admin/api.clj')
-rw-r--r--src/chef/pages/admin/api.clj25
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."))))