-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcore.clj
59 lines (52 loc) · 2.09 KB
/
core.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
51
52
53
54
55
56
57
58
59
(ns cae.core
(:use [liberator.core :only [resource defresource]])
(:require [compojure.core :refer [defroutes ANY GET]]
[ring.middleware.params :refer [wrap-params]]
[ring.middleware.reload :refer [wrap-reload]]
[compojure.route :as route])
(:import [com.google.appengine.api.datastore DatastoreServiceFactory]
[com.google.appengine.api.datastore Query]
[com.google.appengine.api.datastore FetchOptions$Builder]
[com.google.appengine.api.datastore Entity]
)
)
(defn read-db
[]
(let [datastore (DatastoreServiceFactory/getDatastoreService)
query (Query. "item")
prepared-query (.prepare datastore query)
result (.asList prepared-query (FetchOptions$Builder/withDefaults))]
(pr-str (map #(.getProperty %1 "name")
result))))
(defn write-db
[name]
(let [datastore (DatastoreServiceFactory/getDatastoreService)
entity (Entity. "item")]
(.setProperty entity "name" name)
(let [key (.put datastore entity)]
(str key))))
(defn tiger-not-found
[ctx]
(format "That is not THE right word: '%s'. Try again?" (get-in ctx [:request :params "word"])))
(defroutes app
(ANY "/" [] (resource
:available-media-types ["text/html"]
:handle-ok (fn [_]
(str "<h1>Hello World</h1><h2>db contains:</h2><p>" (read-db) "</p>")
)
)
)
(GET "/new/:name" [name] (write-db name))
(ANY "/secret" [] (resource :available-media-types ["text/html"]
:exists? (fn [ctx]
(= "tiger" (get-in ctx [:request :params "word"])))
:handle-ok "You found the secret word!"
:handle-not-found tiger-not-found))
(route/not-found "<h1>Page not found.</h1>"))
(def prod-handler
(-> app
wrap-params))
(def reload-handler
(-> app
wrap-reload
wrap-params))