Fork me on GitHub
#clojure-russia
<
2019-01-10
>
dottedmag12:01:25

Пролистываю книгу "Designing Event-Driven Systems". В первой же главе ссылка на Рича "Deconstructing the Database". Можно продолжать читать 🙂

fmnoise16:01:06

а ссылочку можно?

fmnoise18:01:37

@serioga звучит аппетитно, а есть примерчик?

serioga18:01:04

примерчик, наверное, готовить надо

serioga18:01:21

не вижу у себя подходящего кода можно взять какой-нибудь пример на flow и переписать у меня это где-то пробегало, когда я делал google авторизацию, но похоже этот код «ушёл» а для валидации форм у меня сложился другой подход, не связанный ни с исключениями, ни с flow

serioga18:01:45

@fmnoise если дашь пример кода под flow, который можно перефразировать, то я может на выходных набросал бы

kuzmin_m18:01:12

@serioga а что за подход к валидации форм?

serioga18:01:09

функция применяет набор правил к данным формы и возвращает тупл с конформленными данными формы + данные об ошибках формы [form-params form-errors]

serioga18:01:04

как-то так

(let [[form-params
           form-errors] (form-validation/validate-form-params
                          (validation-rules)
                          (transit/read-transit-stream (:body request)))]
      (if (empty? form-errors)
        (let [_ (db-create-user form-params)]
          (transit-response
            [:run-cmd [[:redirect (config/path-for-route :route--login)]]]))
        (transit-response
          [:update-form
           {:form-params (dissoc form-params :password :password-confirm)
            :form-errors form-errors}])))

serioga18:01:32

(defn validation-rules
  []
  (list
    (form-validation/validate-not-blank
      :first_name "First name is required.")
    (form-validation/validate-not-blank
      :last_name "Last name is required.")
    (form-validation/validate-email :email)
    (form-validation/validate-new-login :login)
    (form-validation/validate-new-password :password :password-confirm)))

serioga18:01:54

(defn validate-not-blank
  [field-id error-message]
  [[:conform #(update % field-id cuerdas/clean)]
   [:validate (fn [form-params errors]
                (let [value (get form-params field-id)]
                  (cond-> errors
                          (or (cuerdas/empty-or-nil? value)
                              (cuerdas/blank? value))
                          (conj [field-id error-message]))))]])

serioga18:01:52

можно тут на форму логина посмотреть https://backend-auth-dev.vonstierlitz.com/

serioga18:01:26

в консоли видно общение с сервером и форматы данных

serioga18:01:07

как-то так...

kuzmin_m18:01:48

там тоже с бэкенда описание подтягивается

kuzmin_m18:01:00

как и у тебя в примере

serioga18:01:47

ну у меня само описание форм не подтягивается, только данные

kuzmin_m18:01:20

данные и ошибки, точно

serioga18:01:40

это я начал в этом году реакт осваивать 🙂

serioga18:01:51

заодно поднял весь стек на кложуре, до этого на https://www.liftweb.net/ вся разработка была...