   [:as {{:keys [dataset_query description display name public_perms visualization_settings]} :body}]
   {name         [Required NonEmptyString]
    public_perms [Required PublicPerms]
-   display      [Required CardDisplayType]}
+   display      [Required NonEmptyString]}
   (->> (ins Card
             :creator_id             *current-user-id*
             :dataset_query          dataset_query

  "Option must be one of `all`, `mine`, or `fav`."
  [symb value :nillable]
  (checkp-contains? #{:all :mine :fav :database :table} symb (keyword value)))

(defannotation CardDisplayType
  "Option must be a valid `display_type`."
  [symb value :nillable]
  (checkp-contains? card/display-types symb (keyword value)))

(defendpoint GET "/"
  "Get all the `Cards`. With param `f` (default is `all`), restrict cards as follows:

  [id :as {{:keys [dataset_query description display name public_perms visualization_settings]} :body}]
  {name         NonEmptyString
   public_perms PublicPerms
   display      NonEmptyString}
  (write-check Card id)
  (upd-non-nil-keys Card id
                    :dataset_query dataset_query
