nice tweak for validation

This commit is contained in:
2023-10-13 00:08:35 -07:00
parent b61e0df108
commit 47f7cc7e76

View File

@@ -23,7 +23,8 @@
[config.core :refer [env]]
[datomic.api :as dc]
[malli.core :as mc]
[malli.transform :as mt2]))
[malli.transform :as mt2]
[manifold.time :as mt]))
(defn filters [request]
[:form {"hx-trigger" "change delay:500ms, keyup changed from:.hot-filter delay:1000ms"
@@ -245,22 +246,14 @@
(let [user (some-> request
:params
:user-id
not-empty
Long/parseLong
(#(dc/pull (dc/db conn) default-read %)))
new-clients (map #(Long/parseLong %)
(cond-> (get form-params "clients")
(string? (get form-params "clients")) vector))
_ @(dc/transact conn [
[:upsert-entity {:db/id (:db/id user)
:user/role (keyword "user-role" (get form-params "role"))
:user/clients new-clients}]])
:user/clients (some-> request :params :clients)}]])
user (some-> request
:params
:user-id
not-empty
Long/parseLong
(#(dc/pull (dc/db conn) default-read %)))]
(html-response
@@ -272,8 +265,6 @@
(let [user (some-> request
:params
:user-id
not-empty
Long/parseLong
(#(dc/pull (dc/db conn) default-read %)))]
(html-response
(com/modal
@@ -324,27 +315,70 @@
[:div])]]))))
(def form-schema
(mc/schema
[:map
[:id nat-int?]
[:client-ids [:vector nat-int?]]
[:role [:enum :user-role/admin :user-role/test]]]))
(defn forced-vector [x]
[:vector {:decode/json {:enter (fn [x]
(if (sequential? x)
x
[x])
)}}
x])
#_(mc/coerce
form-schema
{"id" "1230812"
"client-ids" ["123"]
"role" "admin"}
mt2/json-transformer)
(def entity-id (mc/schema nat-int?))
#_(mt2/coerck)
(defn wrap-schema-decode [handler & {:keys [form query params]}]
(fn [{:keys [form-params query-params] :as request}]
(try
(handler (cond-> request
(and (:params request) params)
(assoc :params
(mc/coerce
params
(:params request)
(mt2/transformer
(mt2/key-transformer {:encode name :decode keyword})
mt2/string-transformer
mt2/json-transformer) ))
(and form form-params)
(assoc :parsed-form-params
(mc/coerce
form
form-params
(mt2/transformer
(mt2/key-transformer {:encode name :decode keyword})
mt2/string-transformer
mt2/json-transformer) ))
(and query query-params)
(assoc :parsed-query-params
(mc/coerce
form
form-params
(mt2/transformer
(mt2/key-transformer {:encode name :decode keyword})
mt2/string-transformer
mt2/json-transformer) ))))
(catch Exception e
{:status 400
:body "error"}))))
(def key->handler
{:users (wrap-admin (helper/page-route grid-page))
:user-table (wrap-admin (helper/table-route grid-page))
:user-edit-save (wrap-client-redirect-unauthenticated (wrap-admin user-edit-save))
:user-edit-dialog (wrap-client-redirect-unauthenticated (wrap-admin user-edit-dialog))
{:users (wrap-admin (helper/page-route grid-page))
:user-table (wrap-admin (helper/table-route grid-page))
:user-edit-save (-> user-edit-save
wrap-admin
wrap-client-redirect-unauthenticated
(wrap-schema-decode
:params (mc/schema
[:map
[:user-id nat-int?]
[:clients (forced-vector entity-id)]
[:role [:enum {:decode/string #(keyword "user-role" %)} :user-role/admin :user-role/manager :user-role/power-user :user-role/user :user-role/none]]])))
:user-edit-dialog (-> user-edit-dialog
wrap-admin
wrap-client-redirect-unauthenticated
(wrap-schema-decode
:params (mc/schema [:map [:user-id entity-id]])))
:user-impersonate (wrap-client-redirect-unauthenticated (wrap-admin impersonate))})