Advertisement
Guest User

Untitled

a guest
Jun 14th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (ns guestbook.routes.home
  2.   (:require [guestbook.layout :as layout]
  3.             [ring.util.http-response :as response]
  4.             [clojure.java.io :as io]
  5.             [guestbook.db.core :as db]
  6.             [ring.util.response :refer [redirect]]
  7.             [compojure.core :refer [defroutes GET POST]]
  8.             [struct.core :as st]))
  9.  
  10. (defn home-page [{:keys [name message errors]}]
  11.   (layout/render
  12.    "home.html"
  13.    (merge {:message (db/get-messages)}
  14.           {:message message
  15.            :name name
  16.            :errors errors})))
  17.  
  18. (def message-schema
  19.   [[:name
  20.     st/required
  21.     st/string]
  22.    
  23.     [:message
  24.      st/required
  25.      st/string
  26.      {:message "must contain at least 10 characters"
  27.       :validate #(> (count %) 9)}]])
  28.      
  29. (defn validate-message [params]
  30.   (first (st/validate params message-schema)))
  31.  
  32. (defn save-message! [{:keys [params]}]
  33.    (if-let [errors (validate-message params)]
  34.      (-> (response/found "/")
  35.          (assoc :flash (assoc params :errors errors)))
  36.      (do
  37.        (db/save-message!
  38.         (assoc params :timestamp (java.util.Date.)))
  39.        (response/found "/")
  40.        (layout/render "home.html"))))
  41.  
  42. (defroutes home-routes
  43.   (GET "/" request (home-page request))
  44.   (POST "/" request (save-message! request)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement