     [:pre (with-out-str
             (pprint item))]]))
 
-;; TODO move to webutil - how to handle call to ->shallow-kebab-map?
 (defmulti decode-body :content-type :default "application/json")
 
 (defmethod decode-body "application/json" [{body :body}] (some-> body read-json-body ->shallow-kebab-map))

                                                    :name name}))]
      {::item item}
      #_(throw (ex-info (format "Cannot find item of id %s")))))
  :post! (fn [{{{:keys [entity-id name]} :route-params :as request} :request}]
           (let [{:keys [members name]} (decode-body request)
                 ds {:entity_id entity-id
                     :name name
                     :members (string/join \, members)}]

  :known-content-type? #{"application/json"}
  :authorized? (authorized? querier :measurement)

  :post! (fn [{{body :body {:keys [device-id]} :route-params} :request}]
           (let [topic (get-in queue ["measurements"])]
             (doseq [measurement (-> body read-json-body ->shallow-kebab-map :measurements)]
               (let [t        (db-timestamp (get measurement "timestamp"))
                     m2       {:device-id device-id
                               :type (get measurement "type")
