summaryrefslogtreecommitdiff
path: root/src/chef/pages/admin/api.clj
blob: ff11672940d2feae46e22af4ee0f9c5f709d4cd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(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))]
                      (when (not= id -1)
                        (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."))))

(defn edit-category [req]
  (cutils/auth-only req
                    (if-let [id (try (Integer/parseInt (get-in req [:path-params :id]))
                                     (catch Exception _ nil))]
                      (do (when-let [name (get-in req [:params "name"])]
                            (jdbc/execute! @cdb/db (sql/format {:update :categories
                                                                :set    {:name name}
                                                                :where  [:= :id id]})))
                          (when-let [question (get-in req [:params "question"])]
                            (jdbc/execute! @cdb/db (sql/format {:update :categories
                                                                :set    {:question question}
                                                                :where  [:= :id id]})))
                          (ruresp/response "Updated."))
                      (ruresp/bad-request "Bad request."))))