Add CRU for the about content.
This commit is contained in:
+67
-5
@@ -1,6 +1,6 @@
|
|||||||
(ns blog.db
|
(ns blog.db
|
||||||
(:require ["pg" :refer [Client]]
|
(:require ["pg" :refer [Client]]
|
||||||
[cljs.core.async :refer [go, take!, put!, >!, chan]]
|
[cljs.core.async :refer [go, take!, put!, <!, >!, chan]]
|
||||||
[cljs.core.async.interop :refer-macros [<p!]]
|
[cljs.core.async.interop :refer-macros [<p!]]
|
||||||
[cljs.core :refer [clj->js js->clj]]
|
[cljs.core :refer [clj->js js->clj]]
|
||||||
[blog.env :as env]))
|
[blog.env :as env]))
|
||||||
@@ -17,10 +17,6 @@
|
|||||||
[client]
|
[client]
|
||||||
(. client connect))
|
(. client connect))
|
||||||
|
|
||||||
(defn create-tables
|
|
||||||
[client]
|
|
||||||
(. client query "CREATE TABLE IF NOT EXISTS articles (id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP);"))
|
|
||||||
|
|
||||||
(defn get-articles
|
(defn get-articles
|
||||||
"Reads all articles and returns via channel. It gets and returns the same channel."
|
"Reads all articles and returns via channel. It gets and returns the same channel."
|
||||||
[client channel]
|
[client channel]
|
||||||
@@ -142,3 +138,69 @@
|
|||||||
(catch js/Error err (js/console.log (ex-cause err)))))
|
(catch js/Error err (js/console.log (ex-cause err)))))
|
||||||
channel)
|
channel)
|
||||||
|
|
||||||
|
(defn get-about
|
||||||
|
"Reads the about article. It gets and returns the same channel. Empty collection if not found."
|
||||||
|
[client channel]
|
||||||
|
(go
|
||||||
|
(try
|
||||||
|
(let [res (<p! (.query client
|
||||||
|
"select id, content, created from about where id=1"))
|
||||||
|
about (-> (.-rows res)
|
||||||
|
(js->clj :keywordize-keys true)
|
||||||
|
(first))]
|
||||||
|
(>! channel (or about [])))
|
||||||
|
(catch js/Error err
|
||||||
|
(do
|
||||||
|
(>! channel nil)
|
||||||
|
(js/console.log (ex-cause err))))))
|
||||||
|
channel)
|
||||||
|
|
||||||
|
(defn insert-about
|
||||||
|
"Insert the about article and return the id via channel. It gets and returns the same channel."
|
||||||
|
[client channel]
|
||||||
|
(go
|
||||||
|
(try
|
||||||
|
(let [res (<! (.query client
|
||||||
|
"insert into about(id, content) values(1, 'Please, Change ME!!!') returning id;"))]
|
||||||
|
(>! channel (-> (.-rows res)
|
||||||
|
(js->clj :keywordize-keys true)
|
||||||
|
(first)
|
||||||
|
(:id))))
|
||||||
|
(catch js/Error err (js/console.log (ex-cause err)))))
|
||||||
|
channel)
|
||||||
|
|
||||||
|
(defn insert-about-if-not-exist
|
||||||
|
"Insert the about article if not exist and return the id via channel. It gets and returns the same channel."
|
||||||
|
[client]
|
||||||
|
(go
|
||||||
|
(let [channel (chan)]
|
||||||
|
(try
|
||||||
|
(let [about (<! (get-about client channel))]
|
||||||
|
(if (= about [])
|
||||||
|
(insert-about client channel))
|
||||||
|
false)
|
||||||
|
(catch js/Error err
|
||||||
|
(do (js/console.log (ex-cause err))
|
||||||
|
true))))))
|
||||||
|
|
||||||
|
(defn update-about
|
||||||
|
"Update the about article and return the id via channel. The timestamp for created will be updated to current timestamp. It gets and returns the same channel."
|
||||||
|
[client content channel]
|
||||||
|
(go
|
||||||
|
(try
|
||||||
|
(let [res (<! (.query client
|
||||||
|
(str "update about "
|
||||||
|
"set content = $1,"
|
||||||
|
"created = CURRENT_TIMESTAMP "
|
||||||
|
"where id = 1;")
|
||||||
|
(clj->js [content])))]
|
||||||
|
(>! channel (-> 1)))
|
||||||
|
(catch js/Error err (js/console.log (ex-cause err)))))
|
||||||
|
channel)
|
||||||
|
|
||||||
|
(defn create-tables
|
||||||
|
[client]
|
||||||
|
(. client query "CREATE TABLE IF NOT EXISTS articles (id SERIAL PRIMARY KEY, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP);")
|
||||||
|
(. client query "CREATE TABLE IF NOT EXISTS about (id SERIAL PRIMARY KEY, content TEXT NOT NULL, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP);")
|
||||||
|
(insert-about-if-not-exist client))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user