compojure-api icon indicating copy to clipboard operation
compojure-api copied to clipboard

Issue with enum query parameter with a default value

Open AlJohri opened this issue 7 years ago • 2 comments

If a query parameter is of type enum and has a default value, the swagger parameter for default should be appropriately set and required should be set to true.

Here is an example below.

what's happening

(GET "/all/" request
     :description "Return a list of articles."
     :return [(dissoc t/Article :is_html :text)]
     :responses default-responses
     :query-params [{sort :- (describe (s/enum :published_at :last_processed_at) "The sort type. Defaults to published_at.") "published_at"}]
     (return (domain/get-all-articles db (org request) :days 1)))

The sort parameter above can be either published_at or last_processed_at where it defaults to the former.

The JSON output for the route above is:

"parameters": [
  {
    "in": "query",
    "name": "sort",
    "description": "The sort type. Defaults to published_at.",
    "required": false,
    "type": "string",
    "enum": [
      "last_processed_at",
      "published_at"
    ]
  }
]

And the UI renders like this:

screen shot 2017-03-18 at 9 59 34 pm

expectation

I would expect the select box in the UI to start off with the published_at pre-selected and not allow a nil option. I would expect the json output to have required set to true and a default value set to published_at.

Thanks for your time!

AlJohri avatar Mar 19 '17 02:03 AlJohri

Missed this, sorry. Wrote an issue to ring-swagger, which does the conversion to swagger json schema.

ikitommi avatar May 26 '17 13:05 ikitommi

~~Sorry to hijack this but what is that describe function?~~

Nevermind, compojure.api.sweet/describe

lasiltan avatar Feb 04 '20 08:02 lasiltan