aboutsummaryrefslogtreecommitdiffstats
path: root/src/chameleon/route.clj
blob: 2b30f42689ff13e0e965ea9f71b132a5a0bcae2c (plain)
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
60
61
62
63
64
65
66
67
68
69
70
71
(ns chameleon.route
  (:require [org.httpkit.client :as kitclient]))

(defn- interpret-response
  "Print out the response from the Gallifrey server"
  [key response]
  (let [{:keys [status body]}@response]
    (println "Response for request with key " key " resulted in status " status
             " with body " body )))

(defn query
  "Retrieve an entity referenced by id at the provided host. Optionally provide
  a time 't-k' that defines a query based on when the system knew about the
  state of the entity."
  [host key & [k]]
  @(kitclient/request {
                       :url (str "https://" host "/entity/" key)
                       :method :get
                       :query-params (if-let [t-k k] {"t-k" t-k})
                       :insecure? true
                       :keepalive 300
                       :timeout 1000}))

(defn assert-create
  "Creates an entity in Gallifrey with an initial set of assertions coming from the provided payload"
  [host actor key payload]
  (print "Final: " payload)
  (kitclient/request {
                      :url (str "https://" host "/entity/" key)
                      :method :put
                      :query-params {"actor" actor "create" "true"}
                      :body payload
                      :insecure? true
                      :keepalive 300
                      :timeout 1000}))

(defn assert-update
  "Update an entity in Gallifrey with a set of assertions coming from the provided payload"
  [host actor key payload]
  (kitclient/request {
                      :url (str "https://" host "/entity/" key)
                      :method :put
                      :query-params {"actor" actor "changes-only" "true"}
                      :body payload
                      :insecure? true
                      :keepalive 300
                      :timeout 1000}))

(defn assert-delete
  "Assert a deletion for an entity in Gallifrey based on the provided key."
  [host actor key]
  (kitclient/request {
                      :url (str "https://" host "/entity/" key)
                      :method :delete
                      :query-params {"actor" actor}
                      :insecure? true
                      :keepalive 300
                      :timeout 1000}))

(defn assert-gallifrey [host actor payload]
  "Propagates an assertion to Gallifrey based off of an event payload coming in from the event service."
  (let [{:keys [meta body]} payload
        {:keys [key operation]} meta]
    (println operation " entity with key " key)
    (interpret-response key (case operation
                              "CREATE"
                              (assert-create host actor key body)
                              "UPDATE"
                              (assert-update host actor key body)
                              "DELETE"
                              (assert-delete host actor key)))))