mirror of
https://github.com/mruwnik/chicken-master.git
synced 2025-06-08 21:34:43 +02:00
50 lines
2.3 KiB
Clojure
50 lines
2.3 KiB
Clojure
(ns chicken-master.api
|
|
(:require [chicken-master.orders :as orders]
|
|
[chicken-master.customers :as customers]
|
|
[chicken-master.products :as products]
|
|
[clojure.edn :as edn]
|
|
[compojure.core :refer [GET POST PUT DELETE defroutes]]))
|
|
|
|
(defn as-edn [resp]
|
|
{:headers {"Content-Type" "application/edn"}
|
|
:body resp})
|
|
|
|
(defn get-customers [user-id] (as-edn (customers/get-all user-id)))
|
|
(defn add-customer [{:keys [body basic-authentication]}]
|
|
(as-edn (some->> body :name (customers/create! basic-authentication))))
|
|
(defn delete-customer [user-id id] (->> id edn/read-string (customers/delete! user-id) as-edn))
|
|
|
|
(defn get-products [user-id] (as-edn (products/get-all user-id)))
|
|
(defn save-products [{:keys [body basic-authentication]}]
|
|
(some->> body (products/update! basic-authentication) (assoc {} :products) as-edn))
|
|
|
|
(defn get-orders [user-id] (as-edn (orders/get-all user-id)))
|
|
(defn update-order [request]
|
|
(let [user-id (:basic-authentication request)
|
|
id (some-> request :route-params :id (Integer/parseInt))
|
|
order (-> request :body (update :id #(or % id)))]
|
|
(as-edn (orders/replace! user-id order))))
|
|
|
|
(defn delete-order [user-id id] (->> id edn/read-string (orders/delete! user-id) as-edn))
|
|
(defn set-order-state [user-id id status] (as-edn (orders/change-state! user-id (edn/read-string id) status)))
|
|
|
|
(defn get-stock [user-id]
|
|
(as-edn
|
|
{:customers (:body (get-customers user-id))
|
|
:products (:body (get-products user-id))}))
|
|
|
|
(defroutes all-routes
|
|
(GET "/stock" [:as {user-id :basic-authentication}] (get-stock user-id))
|
|
(GET "/customers" [:as {user-id :basic-authentication}] (get-customers user-id))
|
|
(POST "/customers" request (add-customer request))
|
|
(DELETE "/customers/:id" [id :as {user-id :basic-authentication}] (delete-customer user-id id))
|
|
|
|
(GET "/products" request (get-products request))
|
|
(POST "/products" request (save-products request))
|
|
|
|
(GET "/orders" [:as {user-id :basic-authentication}] (get-orders user-id))
|
|
(POST "/orders" request (update-order request))
|
|
(PUT "/orders/:id" request (update-order request))
|
|
(DELETE "/orders/:id" [id :as {user-id :basic-authentication}] (delete-order user-id id))
|
|
(POST "/orders/:id/:status" [id status :as {user-id :basic-authentication}] (set-order-state user-id id status)))
|