/
handlers.clj
52 lines (41 loc) · 1.55 KB
/
handlers.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(ns pasmo-gigi.geo.handlers
(:require [compojure
[core :refer [defroutes GET routes]]
[route :refer [resources]]]
[environ.core :refer [env]]
[pasmo-gigi.geo.db
[locations :refer [all-available]]
[surveys :as surveys]]
[ring.middleware
[defaults :refer [site-defaults wrap-defaults]]
[json :refer [wrap-json-body wrap-json-response]]]
[selmer.parser :refer [render-file]]))
(def json-resp {:headers {"Content-Type" "application/json"}})
(defn index
[req]
(render-file "templates/index.html" {:dev? (env :dev?)}))
(defn fetch-survey-details
[req]
(let [year (Integer. (get-in req [:params :year]))
month (get-in req [:params :month])
survey-details {:type "FeatureCollection"
:features (surveys/all-survey-details-for year month)}]
(assoc json-resp :body survey-details)))
(defroutes site
(GET "/" req index)
(resources "/"))
(defroutes api
(GET "/api/locations" req
(let [locations (all-available)]
(assoc json-resp :body {:type "FeatureCollection" :features locations})))
(GET "/api/surveys" _
(let [surveys (surveys/all-survey-dates)]
(assoc json-resp :body surveys)))
(GET "/api/survey-details" req
(wrap-json-body fetch-survey-details {:keyword? true})))
(def api-app
(-> api
wrap-json-body
wrap-json-response))
(def app
(wrap-defaults (routes api-app site) (assoc-in site-defaults [:security :anti-forgery] false)))