nice tweak for validation
This commit is contained in:
@@ -23,7 +23,8 @@
|
|||||||
[config.core :refer [env]]
|
[config.core :refer [env]]
|
||||||
[datomic.api :as dc]
|
[datomic.api :as dc]
|
||||||
[malli.core :as mc]
|
[malli.core :as mc]
|
||||||
[malli.transform :as mt2]))
|
[malli.transform :as mt2]
|
||||||
|
[manifold.time :as mt]))
|
||||||
|
|
||||||
(defn filters [request]
|
(defn filters [request]
|
||||||
[:form {"hx-trigger" "change delay:500ms, keyup changed from:.hot-filter delay:1000ms"
|
[:form {"hx-trigger" "change delay:500ms, keyup changed from:.hot-filter delay:1000ms"
|
||||||
@@ -245,22 +246,14 @@
|
|||||||
(let [user (some-> request
|
(let [user (some-> request
|
||||||
:params
|
:params
|
||||||
:user-id
|
:user-id
|
||||||
not-empty
|
|
||||||
Long/parseLong
|
|
||||||
(#(dc/pull (dc/db conn) default-read %)))
|
(#(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 [
|
_ @(dc/transact conn [
|
||||||
[:upsert-entity {:db/id (:db/id user)
|
[:upsert-entity {:db/id (:db/id user)
|
||||||
:user/role (keyword "user-role" (get form-params "role"))
|
:user/role (keyword "user-role" (get form-params "role"))
|
||||||
:user/clients new-clients}]])
|
:user/clients (some-> request :params :clients)}]])
|
||||||
user (some-> request
|
user (some-> request
|
||||||
:params
|
:params
|
||||||
:user-id
|
:user-id
|
||||||
not-empty
|
|
||||||
Long/parseLong
|
|
||||||
(#(dc/pull (dc/db conn) default-read %)))]
|
(#(dc/pull (dc/db conn) default-read %)))]
|
||||||
|
|
||||||
(html-response
|
(html-response
|
||||||
@@ -272,8 +265,6 @@
|
|||||||
(let [user (some-> request
|
(let [user (some-> request
|
||||||
:params
|
:params
|
||||||
:user-id
|
:user-id
|
||||||
not-empty
|
|
||||||
Long/parseLong
|
|
||||||
(#(dc/pull (dc/db conn) default-read %)))]
|
(#(dc/pull (dc/db conn) default-read %)))]
|
||||||
(html-response
|
(html-response
|
||||||
(com/modal
|
(com/modal
|
||||||
@@ -324,27 +315,70 @@
|
|||||||
|
|
||||||
[:div])]]))))
|
[:div])]]))))
|
||||||
|
|
||||||
(def form-schema
|
(defn forced-vector [x]
|
||||||
(mc/schema
|
[:vector {:decode/json {:enter (fn [x]
|
||||||
[:map
|
(if (sequential? x)
|
||||||
[:id nat-int?]
|
x
|
||||||
[:client-ids [:vector nat-int?]]
|
[x])
|
||||||
[:role [:enum :user-role/admin :user-role/test]]]))
|
)}}
|
||||||
|
x])
|
||||||
|
|
||||||
#_(mc/coerce
|
(def entity-id (mc/schema nat-int?))
|
||||||
form-schema
|
|
||||||
{"id" "1230812"
|
|
||||||
"client-ids" ["123"]
|
|
||||||
"role" "admin"}
|
|
||||||
mt2/json-transformer)
|
|
||||||
|
|
||||||
#_(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
|
(def key->handler
|
||||||
{:users (wrap-admin (helper/page-route grid-page))
|
{:users (wrap-admin (helper/page-route grid-page))
|
||||||
:user-table (wrap-admin (helper/table-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-save (-> user-edit-save
|
||||||
:user-edit-dialog (wrap-client-redirect-unauthenticated (wrap-admin user-edit-dialog))
|
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))})
|
:user-impersonate (wrap-client-redirect-unauthenticated (wrap-admin impersonate))})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user