summaryrefslogtreecommitdiff
path: root/src/chef/pages/admin/api.clj
blob: f1b72265c25f8941b941fb59718f20f85a2ecec6 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
(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"
                                                                      :parent (or (get-in req [:params "parent"])
                                                                                  -1)})]}))
                    (-> (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/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."))))

(defn create-recipe [req]
  (cutils/auth-only req
                    (jdbc/execute! @cdb/db
                                   (sql/format {:insert-into [:recipes]
                                                :values      [{:title "New recipe"}]}))
                    (-> (ruresp/created "Created.")
                        (ruresp/header "HX-Refresh" "true"))))

(defn delete-recipe [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 [:recipes]
                                                      :where       [:= :id id]}))
                          (-> (ruresp/response "Deleted.")
                              (ruresp/header "HX-Refresh" "true")))
                      (ruresp/bad-request "Bad request."))))

;;TODO: validate request
(defn edit-recipe [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 {:update :recipes
                                                      :set    {:title       (get-in req [:params "title"])
                                                               :category    (get-in req [:params "category"])
                                                               :unit        (get-in req [:params "ingredients-unit"])
                                                               :ingredients (get-in req [:params "ingredients"])
                                                               :preparation (get-in req [:params "preparation"])}
                                                      :where  [:= :id id]}))
                          (ruresp/response "Saved."))
                      (ruresp/bad-request "Bad request."))))