mirror of
https://github.com/metosin/reitit.git
synced 2025-12-20 09:31:11 +00:00
fix responses & request
This commit is contained in:
parent
81dfe45b72
commit
d8e9819e0a
4 changed files with 38 additions and 30 deletions
|
|
@ -101,6 +101,10 @@
|
|||
(request-coercion-failed! result coercion value in request serialize-failed-result)
|
||||
result)))))))))
|
||||
|
||||
(defn get-default-schema [request-or-response]
|
||||
(or (-> request-or-response :content :default :schema)
|
||||
(:body request-or-response)))
|
||||
|
||||
(defn content-request-coercer [coercion {:keys [content body]} {::keys [extract-request-format serialize-failed-result]
|
||||
:or {extract-request-format extract-request-format-default}}]
|
||||
(when coercion
|
||||
|
|
|
|||
|
|
@ -168,10 +168,10 @@
|
|||
;; request allow to different :requestBody per content-type
|
||||
{:requestBody
|
||||
{:content (merge
|
||||
(when (:body request)
|
||||
(when-let [default (coercion/get-default-schema request)]
|
||||
(into {}
|
||||
(map (fn [content-type]
|
||||
(let [schema (->schema-object (:body request) {:in :requestBody
|
||||
(let [schema (->schema-object default {:in :requestBody
|
||||
:type :schema
|
||||
:content-type content-type})]
|
||||
[content-type {:schema schema}])))
|
||||
|
|
@ -194,13 +194,12 @@
|
|||
(when responses
|
||||
{:responses
|
||||
(into {}
|
||||
(map (fn [[status {:keys [body content]
|
||||
:as response}]]
|
||||
(map (fn [[status {:keys [content], :as response}]]
|
||||
(let [content (merge
|
||||
(when body
|
||||
(when-let [default (coercion/get-default-schema response)]
|
||||
(into {}
|
||||
(map (fn [content-type]
|
||||
(let [schema (->schema-object body {:in :responses
|
||||
(let [schema (->schema-object default {:in :responses
|
||||
:type :schema
|
||||
:content-type content-type})]
|
||||
[content-type {:schema schema}])))
|
||||
|
|
@ -215,8 +214,8 @@
|
|||
content)))]
|
||||
[status (merge (select-keys response [:description])
|
||||
(when content
|
||||
{:content content}))])))
|
||||
responses)}))))
|
||||
{:content content}))]))
|
||||
responses))}))))
|
||||
|
||||
(defn create
|
||||
([]
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
(when request
|
||||
{:requestBody (openapi/openapi-spec
|
||||
{::openapi/content (merge
|
||||
(when-let [default (:body request)]
|
||||
(when-let [default (coercion/get-default-schema request)]
|
||||
(zipmap content-types (repeat default)))
|
||||
(->> (for [[content-type {:keys [schema]}] (:content request)]
|
||||
[content-type schema])
|
||||
|
|
@ -83,15 +83,16 @@
|
|||
{:responses
|
||||
(into
|
||||
(empty responses)
|
||||
(for [[k {:keys [body content] :as response}] responses]
|
||||
(for [[k {:keys [content] :as response}] responses
|
||||
:let [default (coercion/get-default-schema response)]]
|
||||
[k (merge
|
||||
(select-keys response [:description])
|
||||
(when (or body content)
|
||||
(when (or content default)
|
||||
(openapi/openapi-spec
|
||||
{::openapi/content (merge
|
||||
(when body
|
||||
(zipmap content-types (repeat body)))
|
||||
(->> (for [[content-type {:keys [schema]}] (:content response)]
|
||||
(when default
|
||||
(zipmap content-types (repeat default)))
|
||||
(->> (for [[content-type {:keys [schema]}] content]
|
||||
[content-type schema])
|
||||
(into {})))})))]))}))
|
||||
|
||||
|
|
|
|||
|
|
@ -83,12 +83,15 @@
|
|||
:string {:default string-transformer}
|
||||
:response {:default no-op-transformer}}})
|
||||
|
||||
(defn get-request-default-body [request]
|
||||
(or (-> request :content :default :schema) (:body request)))
|
||||
|
||||
(defn create [{:keys [transformers coerce-response?] :as opts}]
|
||||
^{:type ::coercion/coercion}
|
||||
(reify coercion/Coercion
|
||||
(-get-name [_] :spec)
|
||||
(-get-options [_] opts)
|
||||
(-get-apidocs [this specification {:keys [request parameters responses content-types]
|
||||
(-get-apidocs [_ specification {:keys [request parameters responses content-types]
|
||||
:or {content-types ["application/json"]}}]
|
||||
(case specification
|
||||
:swagger (swagger/swagger-spec
|
||||
|
|
@ -111,7 +114,7 @@
|
|||
(when request
|
||||
{:requestBody (openapi/openapi-spec
|
||||
{::openapi/content (merge
|
||||
(when-let [default (:body request)]
|
||||
(when-let [default (coercion/get-default-schema request)]
|
||||
(zipmap content-types (repeat default)))
|
||||
(->> (for [[content-type {:keys [schema]}] (:content request)]
|
||||
[content-type schema])
|
||||
|
|
@ -124,15 +127,16 @@
|
|||
{:responses
|
||||
(into
|
||||
(empty responses)
|
||||
(for [[k {:keys [body content] :as response}] responses]
|
||||
(for [[k {:keys [content] :as response}] responses
|
||||
:let [default (coercion/get-default-schema response)]]
|
||||
[k (merge
|
||||
(select-keys response [:description])
|
||||
(when (or body content)
|
||||
(when (or content default)
|
||||
(openapi/openapi-spec
|
||||
{::openapi/content (merge
|
||||
(when body
|
||||
(zipmap content-types (repeat (:body response))))
|
||||
(->> (for [[content-type {:keys [schema]}] (:content response)]
|
||||
(when default
|
||||
(zipmap content-types (repeat default)))
|
||||
(->> (for [[content-type {:keys [schema]}] content]
|
||||
[content-type schema])
|
||||
(into {})))})))]))}))
|
||||
(throw
|
||||
|
|
|
|||
Loading…
Reference in a new issue