summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Tom Willemse2026-09-08 00:54:36 -0700
committerGravatar Tom Willemse2026-09-08 00:54:36 -0700
commitcababf71f9411266191d4b1295c030ea533c942c (patch)
tree407c8c5424263d8563b3713b8cabfd953bbd4a2b /src
parent528cbf2ef570894aaf919ed3da0d3cd129a2c8e8 (diff)
downloadlezer-cababf71f9411266191d4b1295c030ea533c942c.tar.gz
lezer-cababf71f9411266191d4b1295c030ea533c942c.zip
Add reading session and progress tables
Each book can have multiple reading sessions, when something is re-read later. Each session has multiple progress updates. Each progress update has a separate total number of pages because the total can change for ebooks depending on the device and the settings that are used.
Diffstat (limited to 'src')
-rw-r--r--src/app.phel1
-rw-r--r--src/controller/routes.phel16
-rw-r--r--src/db.phel2
-rw-r--r--src/view/main.phel6
4 files changed, 24 insertions, 1 deletions
diff --git a/src/app.phel b/src/app.phel
index 7df561f..41565bf 100644
--- a/src/app.phel
+++ b/src/app.phel
@@ -14,6 +14,7 @@
:get {:handler routes/ping-handler}
:post {:handler routes/ping-handler}}]
["/book" {:post {:handler routes/book-create-handler}}]
+ ["/book/{id}/session" {:post {:handler routes/book-session-create-handler}}]
["/author/{id}" {:name :author
:get {:handler routes/author-view-handler}}]]))
diff --git a/src/controller/routes.phel b/src/controller/routes.phel
index 2e537db..7e1cde8 100644
--- a/src/controller/routes.phel
+++ b/src/controller/routes.phel
@@ -37,6 +37,22 @@
:updated_at time}))})))))
(h/response-from-map {:status 301 :headers {:location "/"}}))
+(defn book-session-create-handler [request]
+ (let [id (get-in request [:attributes :match :path-params :id])
+ time (php/time)]
+ (pdo/with-transaction conn
+ (let [session-id (pdo/insert conn :books_sessions {:book_id id
+ :status "started"
+ :started_at time
+ :created_at time
+ :updated_at time})]
+ (pdo/insert conn :sessions_progress {:session_id session-id
+ :progress 0
+ :total 0
+ :created_at time
+ :updated_at time}))))
+ (h/response-from-map {:status 301 :headers {:location "/"}}))
+
(defn author-view-handler [req]
(let [id (get-in req [:attributes :match :path-params :id])
author (first (pdo/select conn "select * from authors where id = :author_id" {:author_id id}))
diff --git a/src/db.phel b/src/db.phel
index a83a290..33aee97 100644
--- a/src/db.phel
+++ b/src/db.phel
@@ -5,5 +5,7 @@
(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_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)")
(pdo/exec conn "create table if not exists authors_books (author_id integer, book_id integer)"))
diff --git a/src/view/main.phel b/src/view/main.phel
index 809b765..decd4d5 100644
--- a/src/view/main.phel
+++ b/src/view/main.phel
@@ -44,7 +44,11 @@
(for [b :in books]
[:li (:title (:book b))
" by "
- (authors-list (:authors b) router)])]]
+ (authors-list (:authors b) router)
+ " "
+ [:form {:action (str "/book/" (:id (:book b)) "/session")
+ :method "POST"}
+ [:button "Start"]]])]]
[:aside
[:h2 "Add new book"]
[:div {:class "flex-center position-ref full-height"}