0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-02 04:19:08 -05:00

Improve error response formatting

This commit is contained in:
Andrey Antukh 2024-10-15 17:46:13 +02:00
parent 1318019ccb
commit 782d733bc9
3 changed files with 25 additions and 25 deletions

View file

@ -111,29 +111,29 @@
(let [explain (ex/explain data)] (let [explain (ex/explain data)]
(l/error :hint "data assertion error" :cause cause) (l/error :hint "data assertion error" :cause cause)
{::rres/status 500 {::rres/status 500
::rres/body {:type :server-error ::rres/body (-> data
:code :assertion (dissoc ::sm/explain)
:data (-> data (cond-> explain (assoc :explain explain))
(dissoc ::sm/explain) (assoc :type :server-error)
(cond-> explain (assoc :explain explain)))}}) (assoc :code :assertion))})
(= code :spec-validation) (= code :spec-validation)
(let [explain (ex/explain data)] (let [explain (ex/explain data)]
(l/error :hint "spec assertion error" :cause cause) (l/error :hint "spec assertion error" :cause cause)
{::rres/status 500 {::rres/status 500
::rres/body {:type :server-error ::rres/body (-> data
:code :assertion (dissoc ::s/problems ::s/value ::s/spec)
:data (-> data (cond-> explain (assoc :explain explain))
(dissoc ::s/problems ::s/value ::s/spec) (assoc :type :server-error)
(cond-> explain (assoc :explain explain)))}}) (assoc :code :assertion))})
:else :else
(do (do
(l/error :hint "assertion error" :cause cause) (l/error :hint "assertion error" :cause cause)
{::rres/status 500 {::rres/status 500
::rres/body {:type :server-error ::rres/body (-> data
:code :assertion (assoc :type :server-error)
:data data}}))))) (assoc :code :assertion))})))))
(defmethod handle-error :not-found (defmethod handle-error :not-found
[err _ _] [err _ _]
@ -143,13 +143,14 @@
(defmethod handle-error :internal (defmethod handle-error :internal
[error request parent-cause] [error request parent-cause]
(binding [l/*context* (request->context request)] (binding [l/*context* (request->context request)]
(let [cause (or parent-cause error)] (let [cause (or parent-cause error)
data (ex-data error)]
(l/error :hint "internal error" :cause cause) (l/error :hint "internal error" :cause cause)
{::rres/status 500 {::rres/status 500
::rres/body {:type :server-error ::rres/body (-> data
:code :unhandled (assoc :type :server-error)
:hint (ex-message error) (update :code #(or % :unhandled))
:data (ex-data error)}}))) (assoc :hint (ex-message error)))})))
(defmethod handle-error :default (defmethod handle-error :default
[error request parent-cause] [error request parent-cause]
@ -209,10 +210,10 @@
(binding [l/*context* (request->context request)] (binding [l/*context* (request->context request)]
(l/error :hint "unhandled error" :cause cause) (l/error :hint "unhandled error" :cause cause)
{::rres/status 500 {::rres/status 500
::rres/body {:type :server-error ::rres/body (-> edata
:code :unhandled (assoc :type :server-error)
:hint (ex-message error) (update :code #(or % :unhandled))
:data edata}})))) (assoc :hint (ex-message error)))}))))
(defmethod handle-exception java.io.IOException (defmethod handle-exception java.io.IOException
[cause _ _] [cause _ _]

View file

@ -288,7 +288,8 @@
(when (ex/exception? cause) (when (ex/exception? cause)
(let [data (ex-data cause) (let [data (ex-data cause)
explain (ex/explain data)] explain (or (:explain data)
(ex/explain data))]
(when explain (when explain
(js/console.log "Explain:") (js/console.log "Explain:")
(js/console.log explain)) (js/console.log explain))

View file

@ -197,8 +197,6 @@
[{:keys [schema errors value]} & {:keys [length level]}] [{:keys [schema errors value]} & {:keys [length level]}]
(let [errors (mapv #(update % :schema form) errors)] (let [errors (mapv #(update % :schema form) errors)]
(with-out-str (with-out-str
(println "Schema: ")
(println (pp/pprint-str (form schema) {:width 100 :level 15 :length 20}))
(println "Errors:") (println "Errors:")
(println (pp/pprint-str errors {:width 100 :level 15 :length 20})) (println (pp/pprint-str errors {:width 100 :level 15 :length 20}))
(println "Value:") (println "Value:")