summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2026-09-08 01:10:54 -0700
committerGravatar Tom Willemse2026-09-08 01:10:54 -0700
commit801f360b6fe596ed7c848b2aa04d28a526216fa7 (patch)
tree862eff49f1c36dede534f85bcdfa87d8cc88c1ff
parentcababf71f9411266191d4b1295c030ea533c942c (diff)
downloadlezer-801f360b6fe596ed7c848b2aa04d28a526216fa7.tar.gz
lezer-801f360b6fe596ed7c848b2aa04d28a526216fa7.zip
books: Add total number of pages per book
Although each session progress has a total number of pages field for when a change in e-reader settings changes the number of pages in a book, each book will also have an initial or standard number of pages. When reading a printed book, the number of pages won't change (except maybe if you change prints of the book), so we can always just use the same number as previously. With ebooks the number of pages will _usually_ remain the same, so there too we can default to the previous value, as long as we allow it to be changed.
-rw-r--r--src/controller/routes.phel7
-rw-r--r--src/db.phel2
-rw-r--r--src/view/main.phel3
3 files changed, 9 insertions, 3 deletions
diff --git a/src/controller/routes.phel b/src/controller/routes.phel
index 7e1cde8..f6ec95e 100644
--- a/src/controller/routes.phel
+++ b/src/controller/routes.phel
@@ -22,11 +22,13 @@
(defn book-create-handler [request]
(let [title (get-in request [:parsed-body "title"])
subtitle (get-in request [:parsed-body "subtitle"])
- authors (str/split (get-in request [:parsed-body "author"]) #",")]
+ authors (str/split (get-in request [:parsed-body "author"]) #",")
+ pages (get-in request [:parsed-body "pages"])]
(pdo/with-transaction conn
(let [time (php/time)
book-id (pdo/insert conn :books {:title title
:subtitle subtitle
+ :pages pages
:created_at time
:updated_at time})]
(for [a :in authors]
@@ -39,6 +41,7 @@
(defn book-session-create-handler [request]
(let [id (get-in request [:attributes :match :path-params :id])
+ pages (pdo/fetch-column (pdo/query conn "select pages from books where id = :id" {:id id}))
time (php/time)]
(pdo/with-transaction conn
(let [session-id (pdo/insert conn :books_sessions {:book_id id
@@ -48,7 +51,7 @@
:updated_at time})]
(pdo/insert conn :sessions_progress {:session_id session-id
:progress 0
- :total 0
+ :total pages
:created_at time
:updated_at time}))))
(h/response-from-map {:status 301 :headers {:location "/"}}))
diff --git a/src/db.phel b/src/db.phel
index 33aee97..965244e 100644
--- a/src/db.phel
+++ b/src/db.phel
@@ -4,7 +4,7 @@
(def conn (pdo/connect "sqlite:test.db"))
(defn initialize-database []
- (pdo/exec conn "create table if not exists books (id integer primary key autoincrement, title varchar(255), subtitle varchar(255), created_at integer, updated_at integer)")
+ (pdo/exec conn "create table if not exists books (id integer primary key autoincrement, title varchar(255), subtitle varchar(255), pages integer, created_at integer, updated_at integer)")
(pdo/exec conn "create table if not exists books_sessions (id integer primary key autoincrement, book_id integer, status string, started_at integer, stopped_at integer, created_at integer, updated_at integer)")
(pdo/exec conn "create table if not exists sessions_progress (id integer primary key autoincrement, session_id integer, progress integer, total integer, created_at integer, updated_at integer)")
(pdo/exec conn "create table if not exists authors (id integer primary key autoincrement, name varchar(255), created_at integer, updated_at integer)")
diff --git a/src/view/main.phel b/src/view/main.phel
index decd4d5..dc57f3c 100644
--- a/src/view/main.phel
+++ b/src/view/main.phel
@@ -61,6 +61,9 @@
[:br]
[:label {:for "author"} "Author: "]
[:input {:type "text" :name "author"}]
+ [:br]
+ [:label {:for "pages"} "# of pages: "]
+ [:input {:type "number" :name "pages"}]
[:input {:type "submit"}]]]]]]))
(defn index-html [books router]