Working!
This commit is contained in:
parent
2d106ee582
commit
495b07ded8
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -41,3 +41,5 @@ resources/sql/youyesyet\.postgres\.sql
|
||||||
|
|
||||||
\.rebel_readline_history
|
\.rebel_readline_history
|
||||||
/dumps/
|
/dumps/
|
||||||
|
|
||||||
|
youyesyet\.canonical\.adl\.xml
|
||||||
|
|
|
@ -116,56 +116,6 @@
|
||||||
:date (jt/to-sql-timestamp (jt/local-date-time)))))))
|
:date (jt/to-sql-timestamp (jt/local-date-time)))))))
|
||||||
|
|
||||||
|
|
||||||
;; (current-visit-id {:session {:user {:email "simon@journeyman.cc",
|
|
||||||
;; :phone "07768 130255",
|
|
||||||
;; :roles #{"analysts" "canvassers" "admin" "teamorganisers" "issueexperts" "issueeditors"},
|
|
||||||
;; :username "simon_brooke",
|
|
||||||
;; :fullname "Simon Brooke",
|
|
||||||
;; :bio "Sinister pagan",
|
|
||||||
;; :elector_id 2, :id 4, :address_id 2,
|
|
||||||
;; :authority_id "GitHub",
|
|
||||||
;; :authorised true}}
|
|
||||||
;; :params {:address_id 79, :elector_id 238, :locality 5494393, :option_id "Yes"}})
|
|
||||||
;; (current-visit-id {:session {:user {:email "simon@journeyman.cc",
|
|
||||||
;; :phone "07768 130255",
|
|
||||||
;; :roles #{"analysts" "canvassers" "admin" "teamorganisers" "issueexperts" "issueeditors"},
|
|
||||||
;; :username "simon_brooke",
|
|
||||||
;; :fullname "Simon Brooke",
|
|
||||||
;; :bio "Sinister pagan",
|
|
||||||
;; :elector_id 2, :id 4, :address_id 2,
|
|
||||||
;; :authority_id "GitHub",
|
|
||||||
;; :authorised true}}
|
|
||||||
;; :params {:address_id 80, :elector_id 239, :locality 5494393, :option_id "Yes"}})
|
|
||||||
|
|
||||||
|
|
||||||
(defmacro do-or-return-reason
|
|
||||||
"Clojure stacktraces are unreadable. We have to do better; evaluate
|
|
||||||
this `form` in a try-catch block; return a map. If the evaluation
|
|
||||||
succeeds, the map will have a key `:result` whose value is the result;
|
|
||||||
otherwise it will have a key `:error` which will be bound to the most
|
|
||||||
sensible error message we can construct."
|
|
||||||
;; TODO: candidate for moving to adl-support.core
|
|
||||||
[form]
|
|
||||||
`(try
|
|
||||||
{:result ~form}
|
|
||||||
(catch Exception any#
|
|
||||||
(clojure.tools.logging/error
|
|
||||||
(str (.getName (.getClass any#))
|
|
||||||
": "
|
|
||||||
(.getMessage any#)
|
|
||||||
(with-out-str
|
|
||||||
(-> any# .printStackTrace))))
|
|
||||||
{:error
|
|
||||||
s/join "\n\tcaused by: "
|
|
||||||
(reverse
|
|
||||||
(loop [ex# any# result# ()]
|
|
||||||
(if-not (nil? ex#)
|
|
||||||
(recur
|
|
||||||
(.getCause ex#)
|
|
||||||
(str (.getName (.getClass ex#)) ": " (.getMessage ex#)))
|
|
||||||
result#)))})))
|
|
||||||
|
|
||||||
|
|
||||||
(defn create-intention-and-visit!
|
(defn create-intention-and-visit!
|
||||||
"Doing visit creation logic server side; request params are expected to
|
"Doing visit creation logic server side; request params are expected to
|
||||||
include an `option_id`, an `elector_id` and an `address_id`, or an `option` and
|
include an `option_id`, an `elector_id` and an `address_id`, or an `option` and
|
||||||
|
@ -177,28 +127,23 @@
|
||||||
[request]
|
[request]
|
||||||
(let [params (massage-params request)]
|
(let [params (massage-params request)]
|
||||||
(log/debug "Creating intention with params: " params)
|
(log/debug "Creating intention with params: " params)
|
||||||
(if (-> request :session :user)
|
(valid-user-or-forbid
|
||||||
(if
|
(if
|
||||||
(and
|
(and
|
||||||
(or (:locality params)
|
(or (:locality params)
|
||||||
(and (:elector_id params)
|
(and (:elector_id params)
|
||||||
(:address_id params)))
|
(:address_id params)))
|
||||||
(:option_id params))
|
(:option_id params))
|
||||||
(let [r (do-or-return-reason
|
(do-or-server-fail
|
||||||
(db/create-intention!
|
(db/create-intention!
|
||||||
db/*db*
|
db/*db*
|
||||||
(assoc
|
(assoc
|
||||||
params :visit_id (current-visit-id request))))]
|
params :visit_id (current-visit-id request)))
|
||||||
(if
|
201)
|
||||||
(:result r)
|
|
||||||
{:status 201
|
|
||||||
:body (json/write-str (:result r))}
|
|
||||||
{:status 500
|
|
||||||
:body (:error r)}))
|
|
||||||
{:status 400
|
{:status 400
|
||||||
:body "create-intention requires params: `option_id` and either `locality` or both `address_id` and `elector_id`."})
|
:body (json/write-str "create-intention requires params: `option_id`
|
||||||
{:status 403
|
and either `locality` or both `address_id` and `elector_id`.")})
|
||||||
:body "You must be logged in to do that"})))
|
request)))
|
||||||
|
|
||||||
|
|
||||||
(defn create-request-and-visit!
|
(defn create-request-and-visit!
|
||||||
|
@ -207,19 +152,20 @@
|
||||||
`method_id` and `method_detail`). Ye cannae reasonably create a request
|
`method_id` and `method_detail`). Ye cannae reasonably create a request
|
||||||
without having recorded the visit, so let's not muck about."
|
without having recorded the visit, so let's not muck about."
|
||||||
[request]
|
[request]
|
||||||
(let [params (massage-params request)]
|
(let [params (assoc
|
||||||
(db/create-followuprequest!
|
(massage-params request)
|
||||||
db/*db*
|
:visit_id (current-visit-id request))]
|
||||||
(assoc
|
(valid-user-or-forbid
|
||||||
|
(with-params-or-error
|
||||||
|
(do-or-server-fail
|
||||||
|
(db/create-followuprequest! db/*db* params)
|
||||||
|
201)
|
||||||
params
|
params
|
||||||
:visit-id (current-visit-id request)))))
|
#{:elector_id :visit_id :issue_id :method_id :method_detail})
|
||||||
|
request)))
|
||||||
|
|
||||||
|
|
||||||
(defroutes rest-routes
|
(defroutes rest-routes
|
||||||
(GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
|
(GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
|
||||||
(GET "/rest/create-intention" request (route/restricted (create-intention-and-visit! request)))
|
(GET "/rest/create-intention" request (route/restricted (create-intention-and-visit! request)))
|
||||||
(GET "/rest/create-request" request (route/restricted (create-request-and-visit! request)))
|
(GET "/rest/create-request" request (route/restricted (create-request-and-visit! request))))
|
||||||
;; (GET "/rest/get-issues" request (route/restricted (get-issues request)))
|
|
||||||
;; (GET "/rest/set-intention" request (route/restricted (set-intention request)))
|
|
||||||
;; (GET "/rest/request-followup" request (route/restricted (request-followup request))))
|
|
||||||
)
|
|
||||||
|
|
|
@ -334,18 +334,18 @@
|
||||||
(reg-event-db
|
(reg-event-db
|
||||||
:send-request
|
:send-request
|
||||||
(fn [db [_ _]]
|
(fn [db [_ _]]
|
||||||
(if (and (:elector db) (:issue db) (:telephone db))
|
(if (and (:elector db) (:issue db) (:method_detail db))
|
||||||
(do
|
(do
|
||||||
(js/console.log "Sending request")
|
(js/console.log "Sending request")
|
||||||
(add-to-feedback
|
(add-to-feedback
|
||||||
(add-to-outqueue
|
(add-to-outqueue
|
||||||
db
|
db
|
||||||
{:elector_id (-> db :elector :id)
|
{:address_id (-> db :address :id)
|
||||||
:issue_id (-> db :issue :id)
|
:elector_id (-> db :elector :id)
|
||||||
:address_id (-> db :address :id)
|
:issue_id (name (-> db :issue))
|
||||||
:method_id "Phone"
|
:method_id "Phone"
|
||||||
:method_detail (-> db :method_detail)
|
:method_detail (-> db :method_detail)
|
||||||
:action :create-request})
|
:action :create-request})
|
||||||
:send-request))
|
:send-request))
|
||||||
(assoc db :error "Please supply a telephone number to call"))))
|
(assoc db :error "Please supply a telephone number to call"))))
|
||||||
|
|
||||||
|
@ -457,7 +457,6 @@
|
||||||
(reg-event-db
|
(reg-event-db
|
||||||
:set-method-detail
|
:set-method-detail
|
||||||
(fn [db [_ detail]]
|
(fn [db [_ detail]]
|
||||||
(js/console.log (str "Setting method detail to " detail))
|
|
||||||
(assoc (clear-messages db) :method_detail detail)))
|
(assoc (clear-messages db) :method_detail detail)))
|
||||||
|
|
||||||
|
|
||||||
|
@ -513,7 +512,15 @@
|
||||||
(reg-event-db
|
(reg-event-db
|
||||||
:tx-failure
|
:tx-failure
|
||||||
(fn [db [_ response]]
|
(fn [db [_ response]]
|
||||||
(js/console.log (str "Transmission failed (" response "), requeueing" (:tx-item db)))
|
(case
|
||||||
(assoc
|
(:status response)
|
||||||
(add-to-outqueue db (:tx-item db))
|
(400 403 500)
|
||||||
:error "Transmission failed, requeueing")))
|
(do
|
||||||
|
(js/console.log "Server responded " (:status response) " - " (:response response) "; not requeueing")
|
||||||
|
(assoc db :error (:response response)))
|
||||||
|
;; default
|
||||||
|
(do
|
||||||
|
(js/console.log (str "Transmission failed (" response "), requeueing" (:tx-item db)))
|
||||||
|
(assoc
|
||||||
|
(add-to-outqueue db (:tx-item db))
|
||||||
|
:error "Transmission failed, requeueing")))))
|
||||||
|
|
Loading…
Reference in a new issue