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 | |
parent | 8cb2c95d253f0a0c1216ac396288f38c238e6b13 (diff) | |
download | chef-d658c185d0c56a72b062a234982c5d1f8da49c1c.tar.xz chef-d658c185d0c56a72b062a234982c5d1f8da49c1c.zip |
Add feature to delete categories
Diffstat (limited to 'src')
-rw-r--r-- | src/chef/pages/admin.clj | 5 | ||||
-rw-r--r-- | src/chef/pages/admin/api.clj | 25 | ||||
-rw-r--r-- | src/chef/routes.clj | 3 |
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 |