migrates accounts to new dialog, adds client search to user

This commit is contained in:
2023-10-17 10:14:02 -07:00
parent 3d9d02f76a
commit 346ece787a
10 changed files with 302 additions and 124 deletions

View File

@@ -8,7 +8,7 @@
[malli.core :as mc]
[malli.error :as me]
[malli.transform :as mt2]
[ring.middleware.nested-params :refer [parse-nested-keys]]))
[slingshot.slingshot :refer [throw+ try+]]))
(defn html-response [hiccup & {:keys [status headers oob] :or {status 200 headers {} oob []}}]
{:status status
@@ -97,11 +97,13 @@
(defn keyword->str [k]
(subs (str k) 1))
(defn validation-error [m & [data]]
(throw+ (ex-info m (merge data {:type :validation}))))
(defn wrap-schema-decode [handler & {:keys [form-schema query-schema route-schema params-schema]}]
(fn [{:keys [form-params query-params params] :as request}]
(try
(handler (cond-> request
(let [request (try
(cond-> request
(and (:params request) params-schema)
(assoc :params
(mc/coerce
@@ -123,7 +125,7 @@
mt2/json-transformer) ))
(and form-schema form-params)
(assoc :parsed-form-params
(assoc :form-params
(mc/coerce
form-schema
form-params
@@ -140,23 +142,24 @@
(mt2/transformer
(mt2/key-transformer {:encode name :decode keyword})
mt2/string-transformer
mt2/json-transformer) ))))
mt2/json-transformer) )))
(catch Exception e
(alog/warn ::validation-error :error e)
(html-response [:span.error-content.text-red-500 (str/join ", "
(mapcat identity
(-> e
(ex-data )
:data
:explain
me/humanize
vals)))]
:status 400)))))
(validation-error (str/join ", "
(->> e
(ex-data )
:data
:explain
me/humanize
(map (fn [[k v]]
(str (if (keyword? k)
(name k)
k) ": " (str/join ", " v))
)))))))] (handler request))))
(defn ref->enum-schema [n]
(into [:enum {:decode/string #(keyword n %)}]
(for [{:db/keys [ident]} (all-schema)
:when (= n (namespace ident))]
:when (= n (namespace ident))]
ident)))
(defn ref->select-options [n & {:keys [allow-nil?]}]
@@ -178,7 +181,7 @@
:else
k)))))})
(defn namespaceize-decoder [n]
#_(defn namespaceize-decoder [n]
{:exit (fn [m]
(when m
(reduce
@@ -189,3 +192,23 @@
m
m)))})
(defn wrap-form-4xx [handler]
(fn [request]
(try+
(handler request)
(catch [:type :validation] e
(alog/warn ::form-4xx :error e)
(html-response [:span.error-content.text-red-500 (:message &throw-context)]
:status 400))))
)
(defn apply-middleware-to-all-handlers [key->handler f]
(->> key->handler
(reduce
(fn [key-handler [k v]]
(assoc key-handler k (f v)))
key->handler)
))