yenu/src/clj/yenu/routes/core.clj

53 lines
1.9 KiB
Clojure

(ns yenu.routes.core
(:require [yenu.layout :as layout]
[compojure.core :refer [defroutes GET POST]]
[ring.util.http-response :as response]
[ring.util.response :refer [redirect file-response]]
[yenu.helpers.images :as images]
[yenu.db.core :as db]))
(defn number-of-pages [images-on-page]
(int (Math/ceil
(/ (:count (db/get-image-count)) images-on-page))))
(defn index-page [current-page]
(let [image-count 15
offset (* (dec current-page) image-count)
pages (number-of-pages image-count)
images (db/get-all-images {:offset offset :count image-count})]
(layout/render "index.html"
{:images images
:current-page current-page
:pages (range 1 (inc pages))})))
(defn detail-page [image-id]
(let [image (db/get-image {:id image-id})
next-img (db/get-next-image {:image-date (:created_at image)})
prev-img (db/get-prev-image {:image-date (:created_at image)})]
(layout/render "detail.html"
{:image image
:next-image next-img
:prev-image prev-img
:tags (db/get-tags-for-image {:id (:id image)})
:comments (db/get-comments-for-image {:image_id (:id image)})})))
(defn image-file [type hash ext]
(let [filename (str hash "." ext)]
(file-response (images/data-path "gallery" type filename))))
(defroutes core-routes
(GET "/" []
(redirect "/page/1"))
(GET "/page/:page-number" [page-number]
(index-page (Integer. page-number)))
(GET "/show/:image-id" [image-id]
(detail-page image-id))
(GET ["/images/:type/:hash.:ext"
;;:type #"(normal|raw|thumbnails)"
;;:hash #"[0-9]+-[^.]+"
;;:ext #"(png|jpg)"
]
[type hash ext]
(image-file type hash ext)))