summaryrefslogtreecommitdiffstats
path: root/src/model/books.phel
diff options
context:
space:
mode:
authorGravatar Tom Willemse2026-09-14 00:51:56 -0700
committerGravatar Tom Willemse2026-09-14 00:53:27 -0700
commitddead52187bfc77e970550ae1fb663b0da88d15f (patch)
treeee077241aefbc38712102669829c36613e2896d9 /src/model/books.phel
parent24fc3ae9367fab7468cd3600cc4c3f61ad9506f6 (diff)
downloadlezer-ddead52187bfc77e970550ae1fb663b0da88d15f.tar.gz
lezer-ddead52187bfc77e970550ae1fb663b0da88d15f.zip
Move database functions to model modules
Diffstat (limited to 'src/model/books.phel')
-rw-r--r--src/model/books.phel43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/model/books.phel b/src/model/books.phel
new file mode 100644
index 0000000..26dbe6f
--- /dev/null
+++ b/src/model/books.phel
@@ -0,0 +1,43 @@
+(ns lezer.model.books
+ (:require lezer.db :refer [conn])
+ (:require phel.pdo)
+ (:require phel.sql)
+ (:require lezer.model.authors))
+
+(defn all []
+ (let [[query _] (sql/format {:select [:*]
+ :from [:books]})]
+ (pdo/select conn query)))
+
+(defn create [fields]
+ (pdo/insert conn :books fields))
+
+(defn pages [book-id]
+ (let [[query params] (sql/format {:select [:pages]
+ :from [:books]
+ :where [:= :id book-id]})]
+ (-> (pdo/prepare conn query)
+ (pdo/execute params)
+ (pdo/fetch-column))))
+
+(defn find [id]
+ (let [[query params] (sql/format {:select [:*]
+ :from [:books]
+ :where [:= :id id]})]
+ (-> (pdo/prepare conn query)
+ (pdo/execute params)
+ (pdo/fetch))))
+
+(defn for-author [author-id]
+ (let [[query params] (sql/format {:select [:*]
+ :from [:books]
+ :where [:in :id {:select [:book_id]
+ :from [:authors_books]
+ :where [:= :author_id author-id]}]})]
+ (-> (pdo/prepare conn query)
+ (pdo/execute params)
+ (pdo/fetch-all))))
+
+(defn add-author [id fields]
+ (pdo/insert conn :authors_books {:book_id id
+ :author_id (authors/find-or-create (:name fields) fields)}))