clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
akond 2019-01-10T05:31:00.294300Z

graalvm теоретически может помочь

dottedmag 2019-01-10T12:09:25.295300Z

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

fmnoise 2019-01-10T16:46:06.297100Z

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

fmnoise 2019-01-10T18:26:37.298500Z

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

serioga 2019-01-10T18:27:04.298900Z

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

serioga 2019-01-10T18:41:21.304Z

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

serioga 2019-01-10T18:42:45.305100Z

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

kuzmin_m 2019-01-10T18:44:12.305600Z

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

serioga 2019-01-10T18:47:09.307600Z

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

serioga 2019-01-10T18:48:04.308100Z

как-то так

(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}])))

serioga 2019-01-10T18:48:32.308300Z

(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)))

serioga 2019-01-10T18:48:54.308500Z

(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]))))]])

serioga 2019-01-10T18:50:52.309300Z

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

serioga 2019-01-10T18:51:26.309800Z

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

serioga 2019-01-10T18:52:07.310Z

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

kuzmin_m 2019-01-10T18:53:37.310700Z

а я вот такую штуку для форм делал https://github.com/darkleaf/form-ujs можно посмотреть тут: https://darkleaf-publicator2.herokuapp.com/register https://github.com/darkleaf/publicator/blob/master/web/src/publicator/web/forms/user/register.clj

kuzmin_m 2019-01-10T18:53:48.311300Z

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

kuzmin_m 2019-01-10T18:54:00.311600Z

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

serioga 2019-01-10T18:54:47.312400Z

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

kuzmin_m 2019-01-10T18:55:20.312600Z

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

serioga 2019-01-10T18:55:40.313Z

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

serioga 2019-01-10T18:56:51.313800Z

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