#5: Progress, but nothing working yet

This commit is contained in:
simon 2017-04-15 11:57:17 +01:00
parent 95507002c7
commit d534302fd8
9 changed files with 148 additions and 12 deletions

View file

@ -118,15 +118,16 @@ ALTER TABLE public.authorities OWNER TO youyesyet;
-- --
CREATE TABLE IF NOT EXISTS canvassers ( CREATE TABLE IF NOT EXISTS canvassers (
id serial, id serial,
username character varying(32) NOT NULL, username character varying(32) NOT NULL,
fullname character varying(64) NOT NULL, fullname character varying(64) NOT NULL,
elector_id integer, elector_id integer,
address_id integer NOT NULL, address_id integer NOT NULL,
phone character varying(16), phone character varying(16),
email character varying(128), email character varying(128),
authority_id character varying(32) NOT NULL, authority_id character varying(32) NOT NULL,
authorised boolean introduced_by int references canvassers(id),
authorised boolean
); );
--;; --;;
@ -534,6 +535,8 @@ ALTER TABLE ONLY canvassers
ADD CONSTRAINT canvassers_elector_id_fkey FOREIGN KEY (elector_id) REFERENCES electors(id); ADD CONSTRAINT canvassers_elector_id_fkey FOREIGN KEY (elector_id) REFERENCES electors(id);
--;; --;;
create unique index canvassers_username_ix on canvassers (username);
create unique index canvassers_email_ix on canvassers(email);
-- --
-- Name: electors_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet -- Name: electors_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet

View file

@ -0,0 +1,17 @@
-- this is just a teardown of everything set up in the corresponding .up.sql file
delete from roles where name = 'Expert';
delete from roles where name = 'Administrator';
delete from roles where name = 'Recruiter';
delete from roles where name = 'Organiser';
delete from roles where name = 'Editor';
alter table issues drop column content;
alter table issues drop column current;
delete from issues where id = 'Currency';
delete from issues where id = 'Monarchy';
delete from issues where id = 'Defence';
delete from options where id = 'Yes';
delete from options where id = 'No';

View file

@ -37,7 +37,7 @@ alter table issues add column content varchar(1024);
-- from the system but kept because it may become current again later. Only -- from the system but kept because it may become current again later. Only
-- current issues are shown in the app. Typically not fewer than three and not -- current issues are shown in the app. Typically not fewer than three and not
-- more than about seven issues should be current at any time. -- more than about seven issues should be current at any time.
alter table issues add column current default false; alter table issues add column current boolean default false;
insert into issues (id, content, current) values ('Currency', insert into issues (id, content, current) values ('Currency',
'Scotland could keep the Pound, or use the Euro. But we could also set up a new currency of our own.', 'Scotland could keep the Pound, or use the Euro. But we could also set up a new currency of our own.',

View file

@ -0,0 +1,11 @@
drop view if exists roles_by_canvasser;
drop view if exists teams_by_canvasser;
drop view if exists canvassers_by_team;
drop view if exists canvassers_by_introducer;
drop view if exists teams_by_organiser;
drop view if exists organisers_by_team;

View file

@ -0,0 +1,59 @@
create view roles_by_canvasser as
select canvassers.id as canvasser, roles.name
from roles, rolememberships, canvassers
where roles.id = rolememberships.role_id
and canvassers.id = rolememberships.canvasser_id
and canvassers.authorised = true;
create view teams_by_canvasser as
select canvassers.id as canvasser, teams.id, teams.name, teams.latitude, teams.longitude
from teams, teammemberships, canvassers
where teams.id = teammemberships.team_id
and canvassers.id = teammemberships.canvasser_id;
create view canvassers_by_team as
select teams.id as team,
canvassers.id,
canvassers.username,
canvassers.fullname,
canvassers.email,
canvassers.phone
from teams, teammemberships, canvassers
where teams.id = teammemberships.team_id
and canvassers.id = teammemberships.canvasser_id
and canvassers.authorised = true;
create view canvassers_by_introducer as
select introducers.id as introducer,
canvassers.id as canvasser,
canvassers.username,
canvassers.fullname,
canvassers.email,
canvassers.phone,
canvassers.authorised
from canvassers, canvassers as introducers
where introducers.id = canvassers.introduced_by;
create view teams_by_organiser as
select canvassers.id as organiser,
teams.id,
teams.name,
teams.latitude,
teams.longitude
from teams, teamorganiserships, canvassers
where teams.id = teamorganiserships.team_id
and canvassers.id = teamorganiserships.canvasser_id
and canvassers.authorised = true;
create view organisers_by_team as
select teams.id as team,
canvassers.id,
canvassers.username,
canvassers.fullname,
canvassers.email,
canvassers.phone
from teams, teamorganiserships, canvassers
where teams.id = teamorganiserships.team_id
and canvassers.id = teamorganiserships.canvasser_id
and canvassers.authorised = true;

View file

@ -239,3 +239,37 @@ SELECT * FROM visits
WHERE id = :id WHERE id = :id
-- visits is audit data; we don't delete it. -- visits is audit data; we don't delete it.
-- views are select only
-- :name get-roles-by-canvasser :? :*
-- :doc Get the role names for the canvasser with the specified id
select name from roles_by_canvasser
where canvasser = :canvasser
-- :name get-teams-by-canvasser :? :*
-- :doc Get details of the teams which the canvasser with the specified id is member of.
select * from teams_by_canvasser
where canvasser = :canvasser_id
-- :name get-canvassers-by-team :? :*
-- :doc Get details of all canvassers who are members of the team with the specified id
select * from canvassers_by_team
where team = :team_id
-- :name get-canvassers-by-team :? :*
-- :doc Get details of all authorised canvassers who are members of this team.
select * from canvassers_by_introducer
where introducer = :introducer_id
-- :name get-teams_by_organiser :? :*
-- :doc Get details of all the teams organised by the canvasser with the specified id
select * from teams_by_organiser
where organiser = :organiser_id
-- :name get-organisers-by-team :? :*
-- :doc Get details of all organisers of the team with the specified id
select * from organisers_by_team
where team = :team_id

View file

@ -1,6 +1,7 @@
(ns youyesyet.handler (ns youyesyet.handler
(:require [compojure.core :refer [routes wrap-routes]] (:require [compojure.core :refer [routes wrap-routes]]
[youyesyet.layout :refer [error-page]] [youyesyet.layout :refer [error-page]]
[youyesyet.routes.authenticated :refer [authenticated-routes]]
[youyesyet.routes.home :refer [home-routes]] [youyesyet.routes.home :refer [home-routes]]
[youyesyet.routes.oauth :refer [oauth-routes]] [youyesyet.routes.oauth :refer [oauth-routes]]
[compojure.route :as route] [compojure.route :as route]
@ -61,6 +62,7 @@
(wrap-routes middleware/wrap-csrf) (wrap-routes middleware/wrap-csrf)
(wrap-routes middleware/wrap-formats)) (wrap-routes middleware/wrap-formats))
#'oauth-routes #'oauth-routes
#'authenticated-routes
(route/not-found (route/not-found
(:body (:body
(error-page {:status 404 (error-page {:status 404

View file

@ -33,12 +33,22 @@
;;; This code adapted from http://www.luminusweb.net/docs#accessing_the_database ;;; This code adapted from http://www.luminusweb.net/docs#accessing_the_database
(defn canvassers-page (defn canvasser-page
[request] [request]
(if (if
(:params request) (:params request)
(let [params (:params request)] (let [params (:params request)]
(if (:id params) (if (:id params)
(db/update-canvasser! params) (db/update-canvasser! params)
(db/create-canvasser! params))))) (db/create-canvasser! params))
)))
(defn routing-page
"Render the routing page, which offers routes according to the user's roles"
[]
(layout/render "routing.html"))
(defroutes authenticated-routes
(GET "/edit-canvasser" request (canvasser-page request))
(POST "/edit-canvasser" request (canvasser-page request))
(GET "/routing" [] (routing-page)))