refactor to use utils
This commit is contained in:
parent
09af95c459
commit
905640b0e1
@ -12,6 +12,27 @@
|
|||||||
[starfederation.datastar.clojure.api :as d*]
|
[starfederation.datastar.clojure.api :as d*]
|
||||||
[starfederation.datastar.clojure.expressions :refer [->expr]]))
|
[starfederation.datastar.clojure.expressions :refer [->expr]]))
|
||||||
|
|
||||||
|
;; utils
|
||||||
|
(defmacro fn-sse [[req sse :as _bindings]
|
||||||
|
& body]
|
||||||
|
`(fn [~req respond# _#]
|
||||||
|
(respond#
|
||||||
|
(->sse-response
|
||||||
|
~req
|
||||||
|
{on-open (fn [~sse]
|
||||||
|
(d*/with-open-sse ~sse
|
||||||
|
~@body))}))))
|
||||||
|
|
||||||
|
(defmacro defn-sse [var-name
|
||||||
|
[req sse :as _bindings]
|
||||||
|
& body]
|
||||||
|
`(defn ~var-name [~req respond# _#]
|
||||||
|
(respond#
|
||||||
|
(->sse-response
|
||||||
|
~req
|
||||||
|
{on-open (fn [~sse]
|
||||||
|
(d*/with-open-sse ~sse
|
||||||
|
~@body))}))))
|
||||||
(comment
|
(comment
|
||||||
(do
|
(do
|
||||||
(defonce printer (bound-fn* pprint/pprint))
|
(defonce printer (bound-fn* pprint/pprint))
|
||||||
@ -19,6 +40,7 @@
|
|||||||
|
|
||||||
(remove-tap printer))
|
(remove-tap printer))
|
||||||
|
|
||||||
|
;; app
|
||||||
(defn render-page [content]
|
(defn render-page [content]
|
||||||
(str
|
(str
|
||||||
(h/html
|
(h/html
|
||||||
@ -34,8 +56,7 @@
|
|||||||
[:body content]])))
|
[:body content]])))
|
||||||
|
|
||||||
(defn todos-fragment []
|
(defn todos-fragment []
|
||||||
;; todo: make functional. sloppy sloppy
|
(let [todos (db/get-all-todos)] ;; todo: make functional. sloppy sloppy
|
||||||
(let [todos (db/get-all-todos)]
|
|
||||||
(h/html
|
(h/html
|
||||||
[:div {:id "todos"}
|
[:div {:id "todos"}
|
||||||
[:div {:data-computed-show-toggle-display "($showComplete ? 'hide' : 'show') + ' done'"}]
|
[:div {:data-computed-show-toggle-display "($showComplete ? 'hide' : 'show') + ' done'"}]
|
||||||
@ -90,28 +111,7 @@
|
|||||||
#:d*.elements{:selector "#todos"
|
#:d*.elements{:selector "#todos"
|
||||||
:patch-mode "replace"}))
|
:patch-mode "replace"}))
|
||||||
|
|
||||||
(defmacro fn-sse [[req sse :as _bindings]
|
(defn-sse create-todo-handler [req sse]
|
||||||
& body]
|
|
||||||
`(fn [~req respond# _#]
|
|
||||||
(respond#
|
|
||||||
(->sse-response
|
|
||||||
~req
|
|
||||||
{on-open (fn [~sse]
|
|
||||||
(d*/with-open-sse ~sse
|
|
||||||
~@body))}))))
|
|
||||||
|
|
||||||
(defmacro defn-sse [var-name
|
|
||||||
[req sse :as _bindings]
|
|
||||||
& body]
|
|
||||||
`(defn ~var-name [~req respond# _#]
|
|
||||||
(respond#
|
|
||||||
(->sse-response
|
|
||||||
~req
|
|
||||||
{on-open (fn [~sse]
|
|
||||||
(d*/with-open-sse ~sse
|
|
||||||
~@body))}))))
|
|
||||||
|
|
||||||
(defn-sse create-todo [req sse]
|
|
||||||
(let [title (-> req :body :title)]
|
(let [title (-> req :body :title)]
|
||||||
(when title
|
(when title
|
||||||
(db/add-todo! title))
|
(db/add-todo! title))
|
||||||
@ -126,43 +126,27 @@
|
|||||||
render-page
|
render-page
|
||||||
respond)))
|
respond)))
|
||||||
|
|
||||||
(wrap-json-body
|
(-> (context "/sse/todo" []
|
||||||
(context "/sse/todo" []
|
|
||||||
(GET "/" []
|
(GET "/" []
|
||||||
(fn-sse [_req sse]
|
(fn-sse [_req sse]
|
||||||
(refresh-todos! sse)))
|
(refresh-todos! sse)))
|
||||||
(POST "/create-todo" [] create-todo)
|
(POST "/create-todo" [] create-todo-handler)
|
||||||
|
|
||||||
(context ["/:id", :id #"[0-9]+"] [id]
|
(context ["/:id", :id #"[0-9]+"] [id]
|
||||||
(let-routes [id (read-string id)]
|
(let-routes [id (read-string id)]
|
||||||
(PATCH "/set" []
|
(PATCH "/set" []
|
||||||
(fn [req respond _]
|
(fn-sse [_req sse]
|
||||||
(db/set-todo-done! id true)
|
(db/set-todo-done! id true)
|
||||||
(respond
|
(refresh-todos! sse)))
|
||||||
(->sse-response req
|
|
||||||
{on-open (fn [sse]
|
|
||||||
(d*/with-open-sse sse
|
|
||||||
(refresh-todos! sse)))}))))
|
|
||||||
(PATCH "/unset" []
|
(PATCH "/unset" []
|
||||||
(fn [req respond _]
|
(fn-sse [_req sse]
|
||||||
(db/set-todo-done! id false)
|
(db/set-todo-done! id false)
|
||||||
(respond
|
(refresh-todos! sse)))
|
||||||
(->sse-response
|
|
||||||
req
|
|
||||||
{on-open (fn [sse]
|
|
||||||
(d*/with-open-sse sse
|
|
||||||
(refresh-todos! sse)))}))))
|
|
||||||
(DELETE "/" []
|
(DELETE "/" []
|
||||||
|
(fn-sse [_req sse]
|
||||||
(db/delete-todo! id)
|
(db/delete-todo! id)
|
||||||
(fn [req respond _]
|
(refresh-todos! sse))))))
|
||||||
(respond
|
(wrap-json-body {:keywords? true}))
|
||||||
(->sse-response
|
|
||||||
req
|
|
||||||
{on-open
|
|
||||||
(fn [sse]
|
|
||||||
(d*/with-open-sse sse
|
|
||||||
(refresh-todos! sse)))})))))))
|
|
||||||
{:keywords? true})
|
|
||||||
(route/not-found (str (h/html [:h2 "Not Found"]))))
|
(route/not-found (str (h/html [:h2 "Not Found"]))))
|
||||||
|
|
||||||
(def app #'approutes)
|
(def app #'approutes)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user