(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)) (GET "/statistics" [] (layout/render "statistics.html")) (GET "/comments" [] (layout/render "comments.html")))