diff --git a/examples/ring-spec-swagger/src/example/server.clj b/examples/ring-spec-swagger/src/example/server.clj index 19e36257..744c5671 100644 --- a/examples/ring-spec-swagger/src/example/server.clj +++ b/examples/ring-spec-swagger/src/example/server.clj @@ -10,8 +10,23 @@ [ring.middleware.params :as params] [ring.adapter.jetty :as jetty] [muuntaja.core :as m] + [clojure.spec.alpha :as s] + [spec-tools.spec :as spec] [clojure.java.io :as io])) +(s/def ::file multipart/temp-file-part) +(s/def ::file-params (s/keys :req-un [::file])) + +(s/def ::name spec/string?) +(s/def ::size spec/int?) +(s/def ::file-response (s/keys :req-un [::name ::size])) + +(s/def ::x spec/int?) +(s/def ::y spec/int?) +(s/def ::total spec/int?) +(s/def ::math-request (s/keys :req-un [::x ::y])) +(s/def ::math-response (s/keys :req-un [::total])) + (def app (ring/ring-handler (ring/router @@ -25,8 +40,8 @@ ["/upload" {:post {:summary "upload a file" - :parameters {:multipart {:file multipart/temp-file-part}} - :responses {200 {:body {:name string?, :size int?}}} + :parameters {:multipart ::file-params} + :responses {200 {:body ::file-response}} :handler (fn [{{{:keys [file]} :multipart} :parameters}] {:status 200 :body {:name (:filename file) @@ -46,14 +61,14 @@ ["/plus" {:get {:summary "plus with spec query parameters" - :parameters {:query {:x int?, :y int?}} - :responses {200 {:body {:total int?}}} + :parameters {:query ::math-request} + :responses {200 {:body ::math-response}} :handler (fn [{{{:keys [x y]} :query} :parameters}] {:status 200 :body {:total (+ x y)}})} :post {:summary "plus with spec body parameters" - :parameters {:body {:x int?, :y int?}} - :responses {200 {:body {:total int?}}} + :parameters {:body ::math-request} + :responses {200 {:body ::math-response}} :handler (fn [{{{:keys [x y]} :body} :parameters}] {:status 200 :body {:total (+ x y)}})}}]]]