summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/chef/pages/admin.clj5
-rw-r--r--src/chef/pages/admin/api.clj25
-rw-r--r--src/chef/routes.clj3
3 files changed, 32 insertions, 1 deletions
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