From 57666e9173c4c0ef2d8dd4fc44104c65ce76f418 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 1 Feb 2022 13:53:10 +0100 Subject: [PATCH] :sparkles: Minor improvements on http reporting on 400 responses --- backend/src/app/http/errors.clj | 11 +++++++++-- common/src/app/common/spec.cljc | 2 +- frontend/src/app/main/errors.cljs | 8 +++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 803c72beef..9e27ce9f11 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -61,8 +61,15 @@ (defmethod handle-exception :validation [err _] - (let [edata (ex-data err)] - {:status 400 :body (dissoc edata ::s/problems ::s/value)})) + (let [data (ex-data err) + explain (binding [s/*explain-out* expound/printer] + (with-out-str + (s/explain-out (update data ::s/problems #(take 10 %)))))] + {:status 400 + :body (-> data + (dissoc ::s/problems) + (dissoc ::s/value) + (assoc :explain explain))})) (defmethod handle-exception :assertion [error request] diff --git a/common/src/app/common/spec.cljc b/common/src/app/common/spec.cljc index 61688c426e..85c4a6912c 100644 --- a/common/src/app/common/spec.cljc +++ b/common/src/app/common/spec.cljc @@ -257,7 +257,7 @@ (let [data (s/explain-data spec data)] (throw (ex/error :type :validation :code :spec-validation - ::s/problems (::s/problems data))))) + ::ex/data data)))) result)) (defmacro instrument! diff --git a/frontend/src/app/main/errors.cljs b/frontend/src/app/main/errors.cljs index 194ff90c1f..ce0a0eb5e6 100644 --- a/frontend/src/app/main/errors.cljs +++ b/frontend/src/app/main/errors.cljs @@ -81,7 +81,13 @@ (js/console.group "Validation Error:") (ex/ignoring (js/console.info - (with-out-str (pprint error)))) + (with-out-str (pprint (dissoc error :explain))))) + + (when-let [explain (:explain error)] + (js/console.group "Spec explain:") + (js/console.log explain) + (js/console.groupEnd "Spec explain:")) + (js/console.groupEnd "Validation Error:"))