
Alpha test code
- Although addresses in the database mostly are real, all personal data in the database - is randomly generated and does not represent real people. + This is a voter intention information system intended to be used by the 'Yes' side in the next independence referendum. + Design documentation is here.
+ +Although addresses in the database mostly are real, all personal data in the database + is randomly generated and does not represent real people.
+ ++ The Canvasser app +
+ +Because the canvasser app now loads data from the database and uses your current location, and the database currently only holds + data for the Castle Douglas area, you're unlikely to see any actual data in the app. A dummy of the app in which you can see + data is here. +
++ The app currently works on the Chrome browser, and on Android phones. I don't yet know whether it works on iPhones. It does not at + present work with Firefox. +
+ ++ The Admin system +
+ +'Save' and 'Delete' buttons on administrative pages do not work; this is intentional at this stage. + I want you to be able to see what different roles in the project can see, without actually being able + to mess up the database.
+ +If you encounter problems, please submit a report here. + General feedback on usability is also appreciated.
{% endblock %} diff --git a/src/clj/youyesyet/routes/auto.clj b/src/clj/youyesyet/routes/auto.clj index d20c677..c52eeb4 100644 --- a/src/clj/youyesyet/routes/auto.clj +++ b/src/clj/youyesyet/routes/auto.clj @@ -1,9 +1,11 @@ (ns youyesyet.routes.auto - "User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180703T230819.733Z" + "User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180705T101418.070Z" (:require [adl-support.core :as support] [clojure.java.io :as io] + [clojure.set :refer [subset?]] + [clojure.tools.logging :as log] [compojure.core :refer [defroutes GET POST]] [hugsql.core :as hugsql] [noir.response :as nresponse] @@ -29,13 +31,13 @@ (l/render (support/resolve-template "list-addresses-Addresses.html") (:session r) - {:title "Addresses", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-address db/*db* p) - (db/list-addresses db/*db* {}))}))) + (merge + {:title "Addresses", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-addresses db/*db* p) + (db/list-addresses db/*db* {}))})))) (defn form-addresses-Address @@ -45,11 +47,30 @@ (l/render (support/resolve-template "form-addresses-Address.html") (:session r) - {:title "Address", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-address db/*db* p)), - :districts (db/list-districts db/*db*)}))) + (merge + {:title "Address", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-address! db/*db* p) + {:message "Updated record"}) + (do (db/create-address! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-address db/*db* p))}) + (list {:districts (db/list-districts db/*db*)})))))) (defn list-authorities-Authorities @@ -59,13 +80,13 @@ (l/render (support/resolve-template "list-authorities-Authorities.html") (:session r) - {:title "Authorities", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-authority db/*db* p) - (db/list-authorities db/*db* {}))}))) + (merge + {:title "Authorities", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-authorities db/*db* p) + (db/list-authorities db/*db* {}))})))) (defn form-authorities-Authority @@ -75,13 +96,32 @@ (l/render (support/resolve-template "form-authorities-Authority.html") (:session r) - {:title "Authority", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-authority db/*db* p))}))) + (merge + {:title "Authority", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-authority! db/*db* p) + {:message "Updated record"}) + (do + (db/create-authority! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-authority db/*db* p))}) + (list)))))) (defn list-canvassers-Canvassers @@ -91,13 +131,13 @@ (l/render (support/resolve-template "list-canvassers-Canvassers.html") (:session r) - {:title "Canvassers", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-canvasser db/*db* p) - (db/list-canvassers db/*db* {}))}))) + (merge + {:title "Canvassers", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-canvassers db/*db* p) + (db/list-canvassers db/*db* {}))})))) (defn form-canvassers-Canvasser @@ -107,17 +147,36 @@ (l/render (support/resolve-template "form-canvassers-Canvasser.html") (:session r) - {:title "Canvasser", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-canvasser db/*db* p)), - :electors (db/list-electors db/*db*), - :addresses (db/list-addresses db/*db*), - :authorities (db/list-authorities db/*db*), - :roles (db/list-roles db/*db*)}))) + (merge + {:title "Canvasser", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-canvasser! db/*db* p) + {:message "Updated record"}) + (do + (db/create-canvasser! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-canvasser db/*db* p))}) + (list + {:electors (db/list-electors db/*db*)} + {:addresses (db/list-addresses db/*db*)} + {:authorities (db/list-authorities db/*db*)} + {:roles (db/list-roles db/*db*)})))))) (defn list-districts-Districts @@ -127,13 +186,13 @@ (l/render (support/resolve-template "list-districts-Districts.html") (:session r) - {:title "Districts", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-district db/*db* p) - (db/list-districts db/*db* {}))}))) + (merge + {:title "Districts", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-districts db/*db* p) + (db/list-districts db/*db* {}))})))) (defn form-districts-District @@ -143,13 +202,32 @@ (l/render (support/resolve-template "form-districts-District.html") (:session r) - {:title "District", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-district db/*db* p))}))) + (merge + {:title "District", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-district! db/*db* p) + {:message "Updated record"}) + (do + (db/create-district! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-district db/*db* p))}) + (list)))))) (defn list-dwellings-Dwellings @@ -159,13 +237,13 @@ (l/render (support/resolve-template "list-dwellings-Dwellings.html") (:session r) - {:title "Dwellings", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-dwelling db/*db* p) - (db/list-dwellings db/*db* {}))}))) + (merge + {:title "Dwellings", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-dwellings db/*db* p) + (db/list-dwellings db/*db* {}))})))) (defn form-dwellings-Dwelling @@ -175,14 +253,32 @@ (l/render (support/resolve-template "form-dwellings-Dwelling.html") (:session r) - {:title "Dwelling", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-dwelling db/*db* p)), - :addresses (db/list-addresses db/*db*)}))) + (merge + {:title "Dwelling", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-dwelling! db/*db* p) + {:message "Updated record"}) + (do + (db/create-dwelling! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-dwelling db/*db* p))}) + (list {:addresses (db/list-addresses db/*db*)})))))) (defn list-electors-Electors @@ -192,13 +288,13 @@ (l/render (support/resolve-template "list-electors-Electors.html") (:session r) - {:title "Electors", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-elector db/*db* p) - (db/list-electors db/*db* {}))}))) + (merge + {:title "Electors", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-electors db/*db* p) + (db/list-electors db/*db* {}))})))) (defn form-electors-Elector @@ -208,12 +304,32 @@ (l/render (support/resolve-template "form-electors-Elector.html") (:session r) - {:title "Elector", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-elector db/*db* p)), - :dwellings (db/list-dwellings db/*db*), - :genders (db/list-genders db/*db*)}))) + (merge + {:title "Elector", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-elector! db/*db* p) + {:message "Updated record"}) + (do (db/create-elector! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-elector db/*db* p))}) + (list + {:dwellings (db/list-dwellings db/*db*)} + {:genders (db/list-genders db/*db*)})))))) (defn list-followupactions-Followupactions @@ -224,13 +340,13 @@ (support/resolve-template "list-followupactions-Followupactions.html") (:session r) - {:title "Followupactions", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-followupaction db/*db* p) - (db/list-followupactions db/*db* {}))}))) + (merge + {:title "Followupactions", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-followupactions db/*db* p) + (db/list-followupactions db/*db* {}))})))) (defn form-followupactions-Followupaction @@ -241,15 +357,34 @@ (support/resolve-template "form-followupactions-Followupaction.html") (:session r) - {:title "Followupaction", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-followupaction db/*db* p)), - :followuprequests (db/list-followuprequests db/*db*), - :canvassers (db/list-canvassers db/*db*)}))) + (merge + {:title "Followupaction", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-followupaction! db/*db* p) + {:message "Updated record"}) + (do + (db/create-followupaction! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-followupaction db/*db* p))}) + (list + {:followuprequests (db/list-followuprequests db/*db*)} + {:canvassers (db/list-canvassers db/*db*)})))))) (defn list-followupmethods-Followupmethods @@ -260,13 +395,13 @@ (support/resolve-template "list-followupmethods-Followupmethods.html") (:session r) - {:title "Followupmethods", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-followupmethod db/*db* p) - (db/list-followupmethods db/*db* {}))}))) + (merge + {:title "Followupmethods", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-followupmethods db/*db* p) + (db/list-followupmethods db/*db* {}))})))) (defn form-followupmethods-Followupmethod @@ -277,13 +412,32 @@ (support/resolve-template "form-followupmethods-Followupmethod.html") (:session r) - {:title "Followupmethod", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-followupmethod db/*db* p))}))) + (merge + {:title "Followupmethod", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-followupmethod! db/*db* p) + {:message "Updated record"}) + (do + (db/create-followupmethod! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-followupmethod db/*db* p))}) + (list)))))) (defn list-followuprequests-Followuprequests @@ -294,13 +448,13 @@ (support/resolve-template "list-followuprequests-Followuprequests.html") (:session r) - {:title "Followuprequests", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-followuprequest db/*db* p) - (db/list-followuprequests db/*db* {}))}))) + (merge + {:title "Followuprequests", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-followuprequests db/*db* p) + (db/list-followuprequests db/*db* {}))})))) (defn form-followuprequests-Followuprequest @@ -311,17 +465,36 @@ (support/resolve-template "form-followuprequests-Followuprequest.html") (:session r) - {:title "Followuprequest", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-followuprequest db/*db* p)), - :electors (db/list-electors db/*db*), - :visits (db/list-visits db/*db*), - :issues (db/list-issues db/*db*), - :followupmethods (db/list-followupmethods db/*db*)}))) + (merge + {:title "Followuprequest", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do + (db/update-followuprequest! db/*db* p) + {:message "Updated record"}) + (do + (db/create-followuprequest! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-followuprequest db/*db* p))}) + (list + {:electors (db/list-electors db/*db*)} + {:visits (db/list-visits db/*db*)} + {:issues (db/list-issues db/*db*)} + {:followupmethods (db/list-followupmethods db/*db*)})))))) (defn list-genders-Genders @@ -331,13 +504,13 @@ (l/render (support/resolve-template "list-genders-Genders.html") (:session r) - {:title "Genders", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-gender db/*db* p) - (db/list-genders db/*db* {}))}))) + (merge + {:title "Genders", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-genders db/*db* p) + (db/list-genders db/*db* {}))})))) (defn form-genders-Gender @@ -347,13 +520,28 @@ (l/render (support/resolve-template "form-genders-Gender.html") (:session r) - {:title "Gender", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-gender db/*db* p))}))) + (merge + {:title "Gender", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-gender! db/*db* p) {:message "Updated record"}) + (do (db/create-gender! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-gender db/*db* p))}) + (list)))))) (defn list-intentions-Intentions @@ -363,13 +551,13 @@ (l/render (support/resolve-template "list-intentions-Intentions.html") (:session r) - {:title "Intentions", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-intention db/*db* p) - (db/list-intentions db/*db* {}))}))) + (merge + {:title "Intentions", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-intentions db/*db* p) + (db/list-intentions db/*db* {}))})))) (defn form-intentions-Intention @@ -379,16 +567,35 @@ (l/render (support/resolve-template "form-intentions-Intention.html") (:session r) - {:title "Intention", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-intention db/*db* p)), - :visits (db/list-visits db/*db*), - :electors (db/list-electors db/*db*), - :options (db/list-options db/*db*)}))) + (merge + {:title "Intention", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"Id"} (map name (keys p))) + (do + (db/update-intention! db/*db* p) + {:message "Updated record"}) + (do + (db/create-intention! db/*db* p) + {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-intention db/*db* p))}) + (list + {:visits (db/list-visits db/*db*)} + {:electors (db/list-electors db/*db*)} + {:options (db/list-options db/*db*)})))))) (defn list-issues-Issues @@ -398,13 +605,13 @@ (l/render (support/resolve-template "list-issues-Issues.html") (:session r) - {:title "Issues", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-issue db/*db* p) - (db/list-issues db/*db* {}))}))) + (merge + {:title "Issues", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-issues db/*db* p) + (db/list-issues db/*db* {}))})))) (defn form-issues-Issue @@ -414,10 +621,28 @@ (l/render (support/resolve-template "form-issues-Issue.html") (:session r) - {:title "Issue", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-issue db/*db* p))}))) + (merge + {:title "Issue", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-issue! db/*db* p) {:message "Updated record"}) + (do (db/create-issue! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-issue db/*db* p))}) + (list)))))) (defn list-options-Options @@ -427,13 +652,13 @@ (l/render (support/resolve-template "list-options-Options.html") (:session r) - {:title "Options", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-option db/*db* p) - (db/list-options db/*db* {}))}))) + (merge + {:title "Options", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-options db/*db* p) + (db/list-options db/*db* {}))})))) (defn form-options-Option @@ -443,13 +668,28 @@ (l/render (support/resolve-template "form-options-Option.html") (:session r) - {:title "Option", - :params p, - :record - (if - (empty? (remove nil? (vals p))) - [] - (db/get-option db/*db* p))}))) + (merge + {:title "Option", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-option! db/*db* p) {:message "Updated record"}) + (do (db/create-option! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-option db/*db* p))}) + (list)))))) (defn list-roles-Roles @@ -459,13 +699,13 @@ (l/render (support/resolve-template "list-roles-Roles.html") (:session r) - {:title "Roles", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-role db/*db* p) - (db/list-roles db/*db* {}))}))) + (merge + {:title "Roles", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-roles db/*db* p) + (db/list-roles db/*db* {}))})))) (defn form-roles-Role @@ -475,11 +715,28 @@ (l/render (support/resolve-template "form-roles-Role.html") (:session r) - {:title "Role", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-role db/*db* p)), - :canvassers (db/list-canvassers db/*db*)}))) + (merge + {:title "Role", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-role! db/*db* p) {:message "Updated record"}) + (do (db/create-role! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-role db/*db* p))}) + (list {:canvassers (db/list-canvassers db/*db*)})))))) (defn list-teams-Teams @@ -489,13 +746,13 @@ (l/render (support/resolve-template "list-teams-Teams.html") (:session r) - {:title "Teams", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-team db/*db* p) - (db/list-teams db/*db* {}))}))) + (merge + {:title "Teams", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-teams db/*db* p) + (db/list-teams db/*db* {}))})))) (defn form-teams-Team @@ -505,12 +762,31 @@ (l/render (support/resolve-template "form-teams-Team.html") (:session r) - {:title "Team", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-team db/*db* p)), - :districts (db/list-districts db/*db*), - :canvassers (db/list-canvassers db/*db*)}))) + (merge + {:title "Team", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-team! db/*db* p) {:message "Updated record"}) + (do (db/create-team! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-team db/*db* p))}) + (list + {:districts (db/list-districts db/*db*)} + {:canvassers (db/list-canvassers db/*db*)} + {:canvassers (db/list-canvassers db/*db*)})))))) (defn list-visits-Visits @@ -520,13 +796,13 @@ (l/render (support/resolve-template "list-visits-Visits.html") (:session r) - {:title "Visits", - :params p, - :records - (if - (not (empty? (remove nil? (vals p)))) - (db/search-strings-visit db/*db* p) - (db/list-visits db/*db* {}))}))) + (merge + {:title "Visits", :params p} + {:records + (if + (not (empty? (remove nil? (vals p)))) + (db/search-strings-visits db/*db* p) + (db/list-visits db/*db* {}))})))) (defn form-visits-Visit @@ -536,12 +812,30 @@ (l/render (support/resolve-template "form-visits-Visit.html") (:session r) - {:title "Visit", - :params p, - :record - (if (empty? (remove nil? (vals p))) [] (db/get-visit db/*db* p)), - :addresses (db/list-addresses db/*db*), - :canvassers (db/list-canvassers db/*db*)}))) + (merge + {:title "Visit", :params p} + (reduce + merge + (merge + (cond + (:save-button p) + (try + (if + (some #{"id"} (map name (keys p))) + (do (db/update-visit! db/*db* p) {:message "Updated record"}) + (do (db/create-visit! db/*db* p) {:message "Saved record"})) + (catch + java.lang.Exception + any__2078__auto__ + {:error (.getMessage any__2078__auto__)}))) + {:record + (if + (empty? (remove nil? (vals p))) + [] + (db/get-visit db/*db* p))}) + (list + {:addresses (db/list-addresses db/*db*)} + {:canvassers (db/list-canvassers db/*db*)})))))) (defn raw-resolve-handler diff --git a/src/clj/youyesyet/routes/auto_json.clj b/src/clj/youyesyet/routes/auto_json.clj index 713c2bf..707e1b7 100644 --- a/src/clj/youyesyet/routes/auto_json.clj +++ b/src/clj/youyesyet/routes/auto_json.clj @@ -1,10 +1,11 @@ (ns youyesyet.routes.auto-json - "JSON routes for youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180703T230818.649Z" + "JSON routes for youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180705T101417.082Z" (:require [adl-support.core :as support] - [clojure.java.io :as io] [clojure.core.memoize :as memo] + [clojure.java.io :as io] + [clojure.tools.logging :as log] [compojure.core :refer [defroutes GET POST]] [hugsql.core :as hugsql] [noir.response :as nresponse] @@ -945,13 +946,13 @@ (do (db/list-visits-by-canvasser params))) (def - search-strings-address + search-strings-addresses (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-address + (db/search-strings-addresses db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -959,13 +960,13 @@ 1000000000)) (def - search-strings-authority + search-strings-authorities (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-authority + (db/search-strings-authorities db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -973,13 +974,13 @@ 10000000000)) (def - search-strings-canvasser + search-strings-canvassers (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-canvasser + (db/search-strings-canvassers db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -987,13 +988,13 @@ 10000000)) (def - search-strings-district + search-strings-districts (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-district + (db/search-strings-districts db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1001,13 +1002,13 @@ 10000000000)) (def - search-strings-dwelling + search-strings-dwellings (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-dwelling + (db/search-strings-dwellings db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1015,13 +1016,13 @@ 1000000000)) (def - search-strings-elector + search-strings-electors (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-elector + (db/search-strings-electors db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1029,24 +1030,24 @@ 100000000)) (defn - search-strings-followupaction + search-strings-followupactions "Auto-generated method to select all records from the `followupactions` table with any text field matching the value of the key `:pattern` which should be in the request. If the keys `(:limit :offset)` are present in the request then they will be used to page through the data. Returns a sequence of maps each containing the following keys: `(:request_id :actor :date :notes :closed :id)`." [{:keys [params form-params]}] (let [result - (db/search-strings-followupaction + (db/search-strings-followupactions db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) (def - search-strings-followupmethod + search-strings-followupmethods (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-followupmethod + (db/search-strings-followupmethods db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1054,13 +1055,13 @@ 10000000000)) (def - search-strings-followuprequest + search-strings-followuprequests (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-followuprequest + (db/search-strings-followuprequests db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1068,13 +1069,13 @@ 100000)) (def - search-strings-gender + search-strings-genders (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-gender + (db/search-strings-genders db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1082,13 +1083,13 @@ 1000000000)) (def - search-strings-intention + search-strings-intentions (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-intention + (db/search-strings-intentions db/*db* (support/massage-params params form-params #{"Id"}))] (response/ok result))) @@ -1096,13 +1097,13 @@ 100000)) (def - search-strings-issue + search-strings-issues (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-issue + (db/search-strings-issues db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1110,13 +1111,13 @@ 1000000)) (def - search-strings-option + search-strings-options (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-option + (db/search-strings-options db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1124,13 +1125,13 @@ 10000000000)) (def - search-strings-role + search-strings-roles (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-role + (db/search-strings-roles db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1138,13 +1139,13 @@ 10000000000)) (def - search-strings-team + search-strings-teams (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-team + (db/search-strings-teams db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1152,13 +1153,13 @@ 10000000)) (def - search-strings-visit + search-strings-visits (memo/ttl (fn [{:keys [params form-params]}] (let [result - (db/search-strings-visit + (db/search-strings-visits db/*db* (support/massage-params params form-params #{"id"}))] (response/ok result))) @@ -1242,6 +1243,17 @@ (support/massage-params params form-params #{"id"}))] (response/found "/"))) +(defn + update-followupmethod! + "Auto-generated method to update one record in the `followupmethods` table. Expects the following key(s) to be present in `params`: `(:id)`." + [{:keys [params form-params]}] + (let + [result + (db/update-followupmethod! + db/*db* + (support/massage-params params form-params #{"id"}))] + (response/found "/"))) + (defn update-followuprequest! "Auto-generated method to update one record in the `followuprequests` table. Expects the following key(s) to be present in `params`: `(:elector_id :id :issue_id :method_id :visit_id)`." @@ -1253,6 +1265,17 @@ (support/massage-params params form-params #{"id"}))] (response/found "/"))) +(defn + update-gender! + "Auto-generated method to update one record in the `genders` table. Expects the following key(s) to be present in `params`: `(:id)`." + [{:keys [params form-params]}] + (let + [result + (db/update-gender! + db/*db* + (support/massage-params params form-params #{"id"}))] + (response/found "/"))) + (defn update-intention! "Auto-generated method to update one record in the `intentions` table. Expects the following key(s) to be present in `params`: `(:Id :elector_id :locality :option_id :visit_id)`." @@ -1275,6 +1298,17 @@ (support/massage-params params form-params #{"id"}))] (response/found "/"))) +(defn + update-option! + "Auto-generated method to update one record in the `options` table. Expects the following key(s) to be present in `params`: `(:id)`." + [{:keys [params form-params]}] + (let + [result + (db/update-option! + db/*db* + (support/massage-params params form-params #{"id"}))] + (response/found "/"))) + (defn update-role! "Auto-generated method to update one record in the `roles` table. Expects the following key(s) to be present in `params`: `(:id :name)`." @@ -1663,69 +1697,69 @@ request (route/restricted (list-visits-by-canvasser request))) (GET - "/json/auto/search-strings-address" + "/json/auto/search-strings-addresses" request - (route/restricted (search-strings-address request))) + (route/restricted (search-strings-addresses request))) (GET - "/json/auto/search-strings-authority" + "/json/auto/search-strings-authorities" request - (route/restricted (search-strings-authority request))) + (route/restricted (search-strings-authorities request))) (GET - "/json/auto/search-strings-canvasser" + "/json/auto/search-strings-canvassers" request - (route/restricted (search-strings-canvasser request))) + (route/restricted (search-strings-canvassers request))) (GET - "/json/auto/search-strings-district" + "/json/auto/search-strings-districts" request - (route/restricted (search-strings-district request))) + (route/restricted (search-strings-districts request))) (GET - "/json/auto/search-strings-dwelling" + "/json/auto/search-strings-dwellings" request - (route/restricted (search-strings-dwelling request))) + (route/restricted (search-strings-dwellings request))) (GET - "/json/auto/search-strings-elector" + "/json/auto/search-strings-electors" request - (route/restricted (search-strings-elector request))) + (route/restricted (search-strings-electors request))) (GET - "/json/auto/search-strings-followupaction" + "/json/auto/search-strings-followupactions" request - (route/restricted (search-strings-followupaction request))) + (route/restricted (search-strings-followupactions request))) (GET - "/json/auto/search-strings-followupmethod" + "/json/auto/search-strings-followupmethods" request - (route/restricted (search-strings-followupmethod request))) + (route/restricted (search-strings-followupmethods request))) (GET - "/json/auto/search-strings-followuprequest" + "/json/auto/search-strings-followuprequests" request - (route/restricted (search-strings-followuprequest request))) + (route/restricted (search-strings-followuprequests request))) (GET - "/json/auto/search-strings-gender" + "/json/auto/search-strings-genders" request - (route/restricted (search-strings-gender request))) + (route/restricted (search-strings-genders request))) (GET - "/json/auto/search-strings-intention" + "/json/auto/search-strings-intentions" request - (route/restricted (search-strings-intention request))) + (route/restricted (search-strings-intentions request))) (GET - "/json/auto/search-strings-issue" + "/json/auto/search-strings-issues" request - (route/restricted (search-strings-issue request))) + (route/restricted (search-strings-issues request))) (GET - "/json/auto/search-strings-option" + "/json/auto/search-strings-options" request - (route/restricted (search-strings-option request))) + (route/restricted (search-strings-options request))) (GET - "/json/auto/search-strings-role" + "/json/auto/search-strings-roles" request - (route/restricted (search-strings-role request))) + (route/restricted (search-strings-roles request))) (GET - "/json/auto/search-strings-team" + "/json/auto/search-strings-teams" request - (route/restricted (search-strings-team request))) + (route/restricted (search-strings-teams request))) (GET - "/json/auto/search-strings-visit" + "/json/auto/search-strings-visits" request - (route/restricted (search-strings-visit request))) + (route/restricted (search-strings-visits request))) (POST "/json/auto/update-address" request @@ -1754,10 +1788,18 @@ "/json/auto/update-followupaction" request (route/restricted (update-followupaction! request))) + (POST + "/json/auto/update-followupmethod" + request + (route/restricted (update-followupmethod! request))) (POST "/json/auto/update-followuprequest" request (route/restricted (update-followuprequest! request))) + (POST + "/json/auto/update-gender" + request + (route/restricted (update-gender! request))) (POST "/json/auto/update-intention" request @@ -1766,6 +1808,10 @@ "/json/auto/update-issue" request (route/restricted (update-issue! request))) + (POST + "/json/auto/update-option" + request + (route/restricted (update-option! request))) (POST "/json/auto/update-role" request