(ns chef.pages.admin.api (:require [chef.utils :as cutils] [chef.database :as cdb] [next.jdbc :as jdbc] [honey.sql :as sql] [ring.util.response :as ruresp])) (defn create-category [req] (cutils/auth-only req (jdbc/execute! @cdb/db (sql/format {:insert-into [:categories] :values [(merge {:name "New category"} (when-let [parent (get-in req [:params "parent"])] {: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."))))