(ns lezer.controller.routes (:require lezer.view.main :refer [index-html]) (:require lezer.view.author :refer [author-html]) (:require lezer.view.book :refer [book-html]) (:require lezer.module.greet :as g) (:require phel.router :as r) (:require phel.http :as h) (:require phel.pdo) (:require phel.string :as str) (:require lezer.db :refer [conn]) (:require lezer.model.books) (:require lezer.model.authors) (:require lezer.model.sessions) (:require lezer.model.progress)) (defn index-handler [req router] (let [books (for [b :in (books/all)] {:book b :authors (authors/for-book b)})] (h/response-from-map {:status 200 :body (index-html books router)}))) (defn book-view-handler [request] (let [id (get-in request [:attributes :match :path-params :id]) book (books/find id)] (h/response-from-map {:status 200 :body (book-html (conj book {:authors (authors/for-book book) :sessions (sessions/for-book book)}))}))) (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"]) #",") pages (get-in request [:parsed-body "pages"])] (pdo/with-transaction conn (let [time (php/time) book-id (books/create {:title title :subtitle subtitle :pages pages :created_at time :updated_at time})] (for [a :in authors] (books/add-author book-id {:name (str/trim a) :created_at time :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]) pages (books/pages id) time (php/time)] (pdo/with-transaction conn (let [session-id (sessions/create {:book_id id :status "started" :started_at time :created_at time :updated_at time})] (progress/create {:session_id session-id :progress 0 :total pages :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 (authors/find id) books (books/for-author id)] (h/response-from-map {:status 200 :body (author-html author books)})))