diff --git a/project.clj b/project.clj index c79e38c..e8e5f22 100644 --- a/project.clj +++ b/project.clj @@ -14,5 +14,9 @@ ;;compojure [compojure "1.3.1"] - - ]) + ;;compojure-api + [metosin/compojure-api "0.16.5"] + [prismatic/schema "0.3.3"] + [metosin/ring-http-response "0.5.2"] + [metosin/ring-swagger "0.14.1"] + [metosin/ring-swagger-ui "2.0.17"]]) diff --git a/src/meetup/compjure-api.clj b/src/meetup/compjure-api.clj new file mode 100644 index 0000000..5dc5900 --- /dev/null +++ b/src/meetup/compjure-api.clj @@ -0,0 +1,46 @@ +(ns meetup.compojure-api + (:require [ring.adapter.jetty :refer [run-jetty]] + [ring.util.http-response :refer :all] + [compojure.api.sweet :refer :all] + [schema.core :as s])) + +(defonce orders (atom {})) + +(s/defschema Supplement + {:type (s/enum :cheese :beef)}) + +(s/defschema Pizza + {:recipe (s/enum :hawaian :italian :vegan) + :size (s/enum :small :medium :large) + (s/optional-key :supplements) [Supplement]}) + +(s/defschema Dessert + {:type (s/enum :yoghourt :cake :fruit)}) + +(s/defschema Drink + {:brand (s/enum :coca-cola :fanta :sprite)}) + +(s/defschema Order + {:type (s/enum :in-place :take-away) + :pizzas [Pizza] + :drinks [Drink] + :desserts [Desserts]}) + +(defn place [order] + (swap! orders into {(keyword (str (java.util.UUID/randomUUID))) order}) order) + +(defapi app + (swagger-ui) + (swagger-docs :title "Chez Guillaume, pizza de qualité!!") + (swaggered "Order" + :description "Order operations" + (context "/order" [] + (POST* "/" [] + :return Order + :body [order Order] + :summary "Place an order" + (place order))))) + +(defonce server + (run-jetty (-> #'app) + {:port 3003 :join? false}))