#47, #48, #49, #50: Auto-generated admin system largely done

This work is closely coupled with work on [ADL](https://github.com/simon-brooke/adl), q.v. At present ADL largely supports this project.
This commit is contained in:
Simon Brooke 2018-06-10 22:31:12 +01:00
parent 79bf3ed7eb
commit a00da8079c
28 changed files with 4018 additions and 47 deletions

View file

@ -0,0 +1,4 @@
(ns ^{:doc "Field-level authorisation. Messy."
:author "Simon Brooke"}
youyesyet.authorisation
(:require [youyesyet.env :refer [defaults]]))

View file

@ -0,0 +1,725 @@
(ns
youyesyet.routes.auto
"User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180610T214425.631Z"
(:require
[noir.response :as nresponse]
[noir.util.route :as route]
[compojure.core :refer [defroutes GET POST]]
[ring.util.http-response :as response]
[clojure.java.io :as io]
[hugsql.core :as hugsql]
[youyesyet.db.core :as db]
[youyesyet.routes.manual :as m]))
(defn
raw-resolve-template
[n]
(if
(.exists (io/as-file (str "resources/templates/" n)))
n
(str "auto/" n)))
(def resolve-template (memoise raw-resolve-template))
(defn
index
[r]
(layout/render
(resolve-template "application-index")
{:title "Administrative menu"}))
(defn
list-electors-Electors
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-electors-Electors.html")
{:title "Electors", :params p, :records (db/search-elector p)})))
(defn
form-electors-Elector
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-electors-Elector.html")
{:title "Elector", :params p, :record (db/get-elector p)})))
(defn
list-genders-Genders
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-genders-Genders.html")
{:title "Genders", :params p, :records (db/search-gender p)})))
(defn
form-genders-Gender
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-genders-Gender.html")
{:title "Gender", :params p, :record (db/get-gender p)})))
(defn
list-dwellings-Dwellings
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-dwellings-Dwellings.html")
{:title "Dwellings", :params p, :records (db/search-dwelling p)})))
(defn
form-dwellings-Dwelling
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-dwellings-Dwelling.html")
{:title "Dwelling", :params p, :record (db/get-dwelling p)})))
(defn
list-addresses-Addresses
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-addresses-Addresses.html")
{:title "Addresses", :params p, :records (db/search-address p)})))
(defn
form-addresses-Address
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-addresses-Address.html")
{:title "Address", :params p, :record (db/get-address p)})))
(defn
list-visits-Visits
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-visits-Visits.html")
{:title "Visits", :params p, :records (db/search-visit p)})))
(defn
form-visits-Visit
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-visits-Visit.html")
{:title "Visit", :params p, :record (db/get-visit p)})))
(defn
list-authorities-Authorities
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-authorities-Authorities.html")
{:title "Authorities",
:params p,
:records (db/search-authority p)})))
(defn
form-authorities-Authority
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-authorities-Authority.html")
{:title "Authority", :params p, :record (db/get-authority p)})))
(defn
list-issues-Issues
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-issues-Issues.html")
{:title "Issues", :params p, :records (db/search-issue p)})))
(defn
form-issues-Issue
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-issues-Issue.html")
{:title "Issue", :params p, :record (db/get-issue p)})))
(defn
list-intentions-Intentions
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-intentions-Intentions.html")
{:title "Intentions", :params p, :records (db/search-intention p)})))
(defn
form-intentions-Intention
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-intentions-Intention.html")
{:title "Intention", :params p, :record (db/get-intention p)})))
(defn
list-canvassers-Canvassers
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-canvassers-Canvassers.html")
{:title "Canvassers", :params p, :records (db/search-canvasser p)})))
(defn
form-canvassers-Canvasser
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-canvassers-Canvasser.html")
{:title "Canvasser", :params p, :record (db/get-canvasser p)})))
(defn
list-followuprequests-Followuprequests
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-followuprequests-Followuprequests.html")
{:title "Followuprequests",
:params p,
:records (db/search-followuprequest p)})))
(defn
form-followuprequests-Followuprequest
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-followuprequests-Followuprequest.html")
{:title "Followuprequest",
:params p,
:record (db/get-followuprequest p)})))
(defn
list-roles-Roles
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-roles-Roles.html")
{:title "Roles", :params p, :records (db/search-role p)})))
(defn
form-roles-Role
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-roles-Role.html")
{:title "Role", :params p, :record (db/get-role p)})))
(defn
list-teams-Teams
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-teams-Teams.html")
{:title "Teams", :params p, :records (db/search-team p)})))
(defn
form-teams-Team
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-teams-Team.html")
{:title "Team", :params p, :record (db/get-team p)})))
(defn
list-districts-Districts
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-districts-Districts.html")
{:title "Districts", :params p, :records (db/search-district p)})))
(defn
form-districts-District
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-districts-District.html")
{:title "District", :params p, :record (db/get-district p)})))
(defn
list-followupactions-Followupactions
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-followupactions-Followupactions.html")
{:title "Followupactions",
:params p,
:records (db/search-followupaction p)})))
(defn
form-followupactions-Followupaction
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-followupactions-Followupaction.html")
{:title "Followupaction",
:params p,
:record (db/get-followupaction p)})))
(defn
list-options-Options
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-options-Options.html")
{:title "Options", :params p, :records (db/search-option p)})))
(defn
form-options-Option
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-options-Option.html")
{:title "Option", :params p, :record (db/get-option p)})))
(defn
list-followupmethods-Followupmethods
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "list-followupmethods-Followupmethods.html")
{:title "Followupmethods",
:params p,
:records (db/search-followupmethod p)})))
(defn
form-followupmethods-Followupmethod
[r]
(let
[p (:form-params r)]
(layout/render
(resolve-template "form-followupmethods-Followupmethod.html")
{:title "Followupmethod",
:params p,
:record (db/get-followupmethod p)})))
(defn
raw-resolve-handler
"Prefer the manually-written version of the handler with name `n`, if it exists, to the automatically generated one"
[n]
(let
[s (symbol (str "m." n))]
(if (bound? s) (eval s) (eval (symbol n)))))
(def resolve-handler (memoize raw-resolve-handler))
(defroutes
auto-selmer-routes
(GET
"/form-addresses-Address"
request
(route/restricted
(apply (resolve-handler "form-addresses-Address") (list request))))
(POST
"/form-addresses-Address"
request
(route/restricted
(apply (resolve-handler "form-addresses-Address") (list request))))
(GET
"/form-authorities-Authority"
request
(route/restricted
(apply
(resolve-handler "form-authorities-Authority")
(list request))))
(POST
"/form-authorities-Authority"
request
(route/restricted
(apply
(resolve-handler "form-authorities-Authority")
(list request))))
(GET
"/form-canvassers-Canvasser"
request
(route/restricted
(apply
(resolve-handler "form-canvassers-Canvasser")
(list request))))
(POST
"/form-canvassers-Canvasser"
request
(route/restricted
(apply
(resolve-handler "form-canvassers-Canvasser")
(list request))))
(GET
"/form-districts-District"
request
(route/restricted
(apply (resolve-handler "form-districts-District") (list request))))
(POST
"/form-districts-District"
request
(route/restricted
(apply (resolve-handler "form-districts-District") (list request))))
(GET
"/form-dwellings-Dwelling"
request
(route/restricted
(apply (resolve-handler "form-dwellings-Dwelling") (list request))))
(POST
"/form-dwellings-Dwelling"
request
(route/restricted
(apply (resolve-handler "form-dwellings-Dwelling") (list request))))
(GET
"/form-electors-Elector"
request
(route/restricted
(apply (resolve-handler "form-electors-Elector") (list request))))
(POST
"/form-electors-Elector"
request
(route/restricted
(apply (resolve-handler "form-electors-Elector") (list request))))
(GET
"/form-followupactions-Followupaction"
request
(route/restricted
(apply
(resolve-handler "form-followupactions-Followupaction")
(list request))))
(POST
"/form-followupactions-Followupaction"
request
(route/restricted
(apply
(resolve-handler "form-followupactions-Followupaction")
(list request))))
(GET
"/form-followupmethods-Followupmethod"
request
(route/restricted
(apply
(resolve-handler "form-followupmethods-Followupmethod")
(list request))))
(POST
"/form-followupmethods-Followupmethod"
request
(route/restricted
(apply
(resolve-handler "form-followupmethods-Followupmethod")
(list request))))
(GET
"/form-followuprequests-Followuprequest"
request
(route/restricted
(apply
(resolve-handler "form-followuprequests-Followuprequest")
(list request))))
(POST
"/form-followuprequests-Followuprequest"
request
(route/restricted
(apply
(resolve-handler "form-followuprequests-Followuprequest")
(list request))))
(GET
"/form-genders-Gender"
request
(route/restricted
(apply (resolve-handler "form-genders-Gender") (list request))))
(POST
"/form-genders-Gender"
request
(route/restricted
(apply (resolve-handler "form-genders-Gender") (list request))))
(GET
"/form-intentions-Intention"
request
(route/restricted
(apply
(resolve-handler "form-intentions-Intention")
(list request))))
(POST
"/form-intentions-Intention"
request
(route/restricted
(apply
(resolve-handler "form-intentions-Intention")
(list request))))
(GET
"/form-issues-Issue"
request
(route/restricted
(apply (resolve-handler "form-issues-Issue") (list request))))
(POST
"/form-issues-Issue"
request
(route/restricted
(apply (resolve-handler "form-issues-Issue") (list request))))
(GET
"/form-options-Option"
request
(route/restricted
(apply (resolve-handler "form-options-Option") (list request))))
(POST
"/form-options-Option"
request
(route/restricted
(apply (resolve-handler "form-options-Option") (list request))))
(GET
"/form-roles-Role"
request
(route/restricted
(apply (resolve-handler "form-roles-Role") (list request))))
(POST
"/form-roles-Role"
request
(route/restricted
(apply (resolve-handler "form-roles-Role") (list request))))
(GET
"/form-teams-Team"
request
(route/restricted
(apply (resolve-handler "form-teams-Team") (list request))))
(POST
"/form-teams-Team"
request
(route/restricted
(apply (resolve-handler "form-teams-Team") (list request))))
(GET
"/form-visits-Visit"
request
(route/restricted
(apply (resolve-handler "form-visits-Visit") (list request))))
(POST
"/form-visits-Visit"
request
(route/restricted
(apply (resolve-handler "form-visits-Visit") (list request))))
(GET
"/list-addresses-Addresses"
request
(route/restricted
(apply
(resolve-handler "list-addresses-Addresses")
(list request))))
(POST
"/list-addresses-Addresses"
request
(route/restricted
(apply
(resolve-handler "list-addresses-Addresses")
(list request))))
(GET
"/list-authorities-Authorities"
request
(route/restricted
(apply
(resolve-handler "list-authorities-Authorities")
(list request))))
(POST
"/list-authorities-Authorities"
request
(route/restricted
(apply
(resolve-handler "list-authorities-Authorities")
(list request))))
(GET
"/list-canvassers-Canvassers"
request
(route/restricted
(apply
(resolve-handler "list-canvassers-Canvassers")
(list request))))
(POST
"/list-canvassers-Canvassers"
request
(route/restricted
(apply
(resolve-handler "list-canvassers-Canvassers")
(list request))))
(GET
"/list-districts-Districts"
request
(route/restricted
(apply
(resolve-handler "list-districts-Districts")
(list request))))
(POST
"/list-districts-Districts"
request
(route/restricted
(apply
(resolve-handler "list-districts-Districts")
(list request))))
(GET
"/list-dwellings-Dwellings"
request
(route/restricted
(apply
(resolve-handler "list-dwellings-Dwellings")
(list request))))
(POST
"/list-dwellings-Dwellings"
request
(route/restricted
(apply
(resolve-handler "list-dwellings-Dwellings")
(list request))))
(GET
"/list-electors-Electors"
request
(route/restricted
(apply (resolve-handler "list-electors-Electors") (list request))))
(POST
"/list-electors-Electors"
request
(route/restricted
(apply (resolve-handler "list-electors-Electors") (list request))))
(GET
"/list-followupactions-Followupactions"
request
(route/restricted
(apply
(resolve-handler "list-followupactions-Followupactions")
(list request))))
(POST
"/list-followupactions-Followupactions"
request
(route/restricted
(apply
(resolve-handler "list-followupactions-Followupactions")
(list request))))
(GET
"/list-followupmethods-Followupmethods"
request
(route/restricted
(apply
(resolve-handler "list-followupmethods-Followupmethods")
(list request))))
(POST
"/list-followupmethods-Followupmethods"
request
(route/restricted
(apply
(resolve-handler "list-followupmethods-Followupmethods")
(list request))))
(GET
"/list-followuprequests-Followuprequests"
request
(route/restricted
(apply
(resolve-handler "list-followuprequests-Followuprequests")
(list request))))
(POST
"/list-followuprequests-Followuprequests"
request
(route/restricted
(apply
(resolve-handler "list-followuprequests-Followuprequests")
(list request))))
(GET
"/list-genders-Genders"
request
(route/restricted
(apply (resolve-handler "list-genders-Genders") (list request))))
(POST
"/list-genders-Genders"
request
(route/restricted
(apply (resolve-handler "list-genders-Genders") (list request))))
(GET
"/list-intentions-Intentions"
request
(route/restricted
(apply
(resolve-handler "list-intentions-Intentions")
(list request))))
(POST
"/list-intentions-Intentions"
request
(route/restricted
(apply
(resolve-handler "list-intentions-Intentions")
(list request))))
(GET
"/list-issues-Issues"
request
(route/restricted
(apply (resolve-handler "list-issues-Issues") (list request))))
(POST
"/list-issues-Issues"
request
(route/restricted
(apply (resolve-handler "list-issues-Issues") (list request))))
(GET
"/list-options-Options"
request
(route/restricted
(apply (resolve-handler "list-options-Options") (list request))))
(POST
"/list-options-Options"
request
(route/restricted
(apply (resolve-handler "list-options-Options") (list request))))
(GET
"/list-roles-Roles"
request
(route/restricted
(apply (resolve-handler "list-roles-Roles") (list request))))
(POST
"/list-roles-Roles"
request
(route/restricted
(apply (resolve-handler "list-roles-Roles") (list request))))
(GET
"/list-teams-Teams"
request
(route/restricted
(apply (resolve-handler "list-teams-Teams") (list request))))
(POST
"/list-teams-Teams"
request
(route/restricted
(apply (resolve-handler "list-teams-Teams") (list request))))
(GET
"/list-visits-Visits"
request
(route/restricted
(apply (resolve-handler "list-visits-Visits") (list request))))
(POST
"/list-visits-Visits"
request
(route/restricted
(apply (resolve-handler "list-visits-Visits") (list request)))))

View file

@ -0,0 +1,38 @@
(ns
youyesyet.routes.auto
"Manual overrides for auto-generated routes"
(:require
[noir.response :as nresponse]
[noir.util.route :as route]
[compojure.core :refer [defroutes GET POST]]
[ring.util.http-response :as response]
[clojure.java.io :as io]
[hugsql.core :as hugsql]
[youyesyet.db.core :as db]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
;;;; youyesyet.routes.manual: Manual overrides for auto-generated routes.
;;;;
;;;; This program is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU General Public License
;;;; as published by the Free Software Foundation; either version 2
;;;; of the License, or (at your option) any later version.
;;;;
;;;; This program is distributed in the hope that it will be useful,
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;;; GNU General Public License for more details.
;;;;
;;;; You should have received a copy of the GNU General Public License
;;;; along with this program; if not, write to the Free Software
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
;;;; USA.
;;;;
;;;; Copyright (C) 2017 Simon Brooke for Radical Independence Campaign
;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Any of the routes defined in auto.clj can be overridden in this file. This means that
;;; new autogenerated code will not overwrite manually generated code.