diff --git a/project.clj b/project.clj index f508670..0dff0ab 100644 --- a/project.clj +++ b/project.clj @@ -30,6 +30,7 @@ [mount "0.1.10"] [cprop "0.1.9"] [org.clojure/tools.cli "0.3.5"] + [migratus "0.8.31"] [luminus-nrepl "0.1.4"] [luminus-migrations "0.2.7"] [conman "0.6.1"] diff --git a/resources/migrations/20161014170335-basic-setup.down.sql b/resources/migrations/20161014170335-basic-setup.down.sql new file mode 100644 index 0000000..cc1f647 --- /dev/null +++ b/resources/migrations/20161014170335-basic-setup.down.sql @@ -0,0 +1 @@ +DROP TABLE users; diff --git a/resources/migrations/20161014170335-basic-setup.up.sql b/resources/migrations/20161014170335-basic-setup.up.sql new file mode 100644 index 0000000..8468728 --- /dev/null +++ b/resources/migrations/20161014170335-basic-setup.up.sql @@ -0,0 +1,665 @@ +-------------------------------------------------------------------------------- +---- +---- 20161014170335-basic-setup.up.sql: database schema for youyesyet. +---- +---- 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) 2016 Simon Brooke for Radical Independence Campaign +---- +-------------------------------------------------------------------------------- +---- +---- NOTE +---- This file is essentially a Postgres schema dump of a database schema which was +---- created with the function initdb! in the file src/clj/youyesyet/db/schema.clj. +---- This file has then been mildly massaged to work with Migratus. +---- Either this file or src/clj/youyesyet/db/schema.clj is redundant; schema.clj +---- represents the older, Korma, way of doing things but does not readily allow +---- for migrations; this file represents the newer Migratus/HugSQL way. I'm not +---- certain which of these paths I'm going to go down. +---- +-------------------------------------------------------------------------------- + +SET statement_timeout = 0; +--;; +SET lock_timeout = 0; +--;; +SET client_encoding = 'UTF8'; +--;; +SET standard_conforming_strings = on; +--;; +SET check_function_bodies = false; +--;; +SET client_min_messages = warning; +--;; +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; +--;; + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; +--;; + +SET search_path = public, pg_catalog; +--;; +SET default_tablespace = ''; +--;; +SET default_with_oids = false; +--;; +-- +-- Name: addresses; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE addresses ( + id integer NOT NULL, + address character varying(256) NOT NULL, + postcode character varying(16), + phone character varying(16), + district_id integer, + latitude real, + longitude real +); +--;; + +ALTER TABLE public.addresses OWNER TO youyesyet; +--;; +-- +-- Name: addresses_id_seq; Type: SEQUENCE; Schema: public; Owner: youyesyet +-- + +CREATE SEQUENCE addresses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +--;; + +ALTER TABLE public.addresses_id_seq OWNER TO youyesyet; +--;; +-- +-- Name: addresses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: youyesyet +-- + +ALTER SEQUENCE addresses_id_seq OWNED BY addresses.id; +--;; + +-- +-- Name: authorities; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE authorities ( + id character varying(32) NOT NULL +); +--;; + +ALTER TABLE public.authorities OWNER TO youyesyet; +--;; +-- +-- Name: canvassers; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE canvassers ( + id character varying(32) NOT NULL, + fullname character varying(64) NOT NULL, + elector_id integer, + address_id integer NOT NULL, + phone character varying(16), + email character varying(128), + authority_id character varying(32) NOT NULL, + authorised boolean +); +--;; + +ALTER TABLE public.canvassers OWNER TO youyesyet; +--;; +-- +-- Name: districts; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE districts ( + id integer NOT NULL, + name character varying(64) NOT NULL +); +--;; + +ALTER TABLE public.districts OWNER TO youyesyet; +--;; +-- +-- Name: electors; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE electors ( + id integer NOT NULL, + name character varying(64) NOT NULL, + address_id integer NOT NULL, + phone character varying(16), + email character varying(128) +); +--;; + +ALTER TABLE public.electors OWNER TO youyesyet; +--;; +-- +-- Name: followupactions; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE followupactions ( + id integer NOT NULL, + request_id integer NOT NULL, + actor character varying(32) NOT NULL, + date timestamp with time zone DEFAULT now() NOT NULL, + notes text, + closed boolean +); +--;; + +ALTER TABLE public.followupactions OWNER TO youyesyet; + +-- +-- Name: followupactions_id_seq; Type: SEQUENCE; Schema: public; Owner: youyesyet +-- + +CREATE SEQUENCE followupactions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +--;; + +ALTER TABLE public.followupactions_id_seq OWNER TO youyesyet; +--;; +-- +-- Name: followupactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: youyesyet +-- + +ALTER SEQUENCE followupactions_id_seq OWNED BY followupactions.id; +--;; + +-- +-- Name: followupmethods; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE followupmethods ( + id character varying(32) NOT NULL +); +--;; + +ALTER TABLE public.followupmethods OWNER TO youyesyet; +--;; +-- +-- Name: followuprequests; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +insert into followupmethods values ('Telephone'); +--;; +insert into followupmethods values ('eMail'); +--;; +insert into followupmethods values ('Post'); +--;; + + +CREATE TABLE followuprequests ( + id integer NOT NULL, + elector_id integer NOT NULL, + visit_id integer NOT NULL, + issue_id character varying(32) NOT NULL, + method_id character varying(32) NOT NULL +); +--;; + +ALTER TABLE public.followuprequests OWNER TO youyesyet; +--;; + +-- +-- Name: followuprequests_id_seq; Type: SEQUENCE; Schema: public; Owner: youyesyet +-- + +CREATE SEQUENCE followuprequests_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +--;; + + +ALTER TABLE public.followuprequests_id_seq OWNER TO youyesyet; +--;; + +-- +-- Name: followuprequests_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: youyesyet +-- + +ALTER SEQUENCE followuprequests_id_seq OWNED BY followuprequests.id; +--;; + + +-- +-- Name: issueexpertise; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE issueexpertise ( + canvasser_id character varying(32) NOT NULL, + issue_id character varying(32) NOT NULL, + method_id character varying(32) NOT NULL +); +--;; + + +ALTER TABLE public.issueexpertise OWNER TO youyesyet; +--;; + +-- +-- Name: issues; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE issues ( + id character varying(32) NOT NULL, + url character varying(256) +); +--;; + + +ALTER TABLE public.issues OWNER TO youyesyet; +--;; + +-- +-- Name: options; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE options ( + id character varying(32) NOT NULL +); +--;; + + +ALTER TABLE public.options OWNER TO youyesyet; +--;; + +-- +-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE schema_migrations ( + id bigint NOT NULL +); +--;; + + +ALTER TABLE public.schema_migrations OWNER TO youyesyet; +--;; + +-- +-- Name: visits; Type: TABLE; Schema: public; Owner: youyesyet; Tablespace: +-- + +CREATE TABLE visits ( + id integer NOT NULL, + address_id integer NOT NULL, + canvasser_id character varying(32) NOT NULL, + date timestamp with time zone DEFAULT now() NOT NULL +); +--;; + + +ALTER TABLE public.visits OWNER TO youyesyet; +--;; + +-- +-- Name: visits_id_seq; Type: SEQUENCE; Schema: public; Owner: youyesyet +-- + +CREATE SEQUENCE visits_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +--;; + + +ALTER TABLE public.visits_id_seq OWNER TO youyesyet; +--;; + +-- +-- Name: visits_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: youyesyet +-- + +ALTER SEQUENCE visits_id_seq OWNED BY visits.id; +--;; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY addresses ALTER COLUMN id SET DEFAULT nextval('addresses_id_seq'::regclass); +--;; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followupactions ALTER COLUMN id SET DEFAULT nextval('followupactions_id_seq'::regclass); +--;; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followuprequests ALTER COLUMN id SET DEFAULT nextval('followuprequests_id_seq'::regclass); +--;; + + +-- +-- Name: id; Type: DEFAULT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY visits ALTER COLUMN id SET DEFAULT nextval('visits_id_seq'::regclass); +--;; + + +-- +-- Name: addresses_address_key; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY addresses + ADD CONSTRAINT addresses_address_key UNIQUE (address); +--;; + + +-- +-- Name: addresses_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY addresses + ADD CONSTRAINT addresses_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: authorities_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY authorities + ADD CONSTRAINT authorities_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: canvassers_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY canvassers + ADD CONSTRAINT canvassers_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: districts_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY districts + ADD CONSTRAINT districts_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: electors_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY electors + ADD CONSTRAINT electors_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: followupactions_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY followupactions + ADD CONSTRAINT followupactions_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: followupmethods_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY followupmethods + ADD CONSTRAINT followupmethods_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: followuprequests_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY followuprequests + ADD CONSTRAINT followuprequests_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: issues_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY issues + ADD CONSTRAINT issues_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: options_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY options + ADD CONSTRAINT options_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: schema_migrations_id_key; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY schema_migrations + ADD CONSTRAINT schema_migrations_id_key UNIQUE (id); +--;; + + +-- +-- Name: visits_pkey; Type: CONSTRAINT; Schema: public; Owner: youyesyet; Tablespace: +-- + +ALTER TABLE ONLY visits + ADD CONSTRAINT visits_pkey PRIMARY KEY (id); +--;; + + +-- +-- Name: addresses_district_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY addresses + ADD CONSTRAINT addresses_district_id_fkey FOREIGN KEY (district_id) REFERENCES districts(id); +--;; + + +-- +-- Name: canvassers_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY canvassers + ADD CONSTRAINT canvassers_address_id_fkey FOREIGN KEY (address_id) REFERENCES addresses(id); +--;; + + +-- +-- Name: canvassers_authority_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY canvassers + ADD CONSTRAINT canvassers_authority_id_fkey FOREIGN KEY (authority_id) REFERENCES authorities(id); +--;; + + +-- +-- Name: canvassers_elector_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY canvassers + ADD CONSTRAINT canvassers_elector_id_fkey FOREIGN KEY (elector_id) REFERENCES electors(id); +--;; + + +-- +-- Name: electors_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY electors + ADD CONSTRAINT electors_address_id_fkey FOREIGN KEY (address_id) REFERENCES addresses(id); +--;; + + +-- +-- Name: followupactions_actor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followupactions + ADD CONSTRAINT followupactions_actor_fkey FOREIGN KEY (actor) REFERENCES canvassers(id); +--;; + + +-- +-- Name: followupactions_request_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followupactions + ADD CONSTRAINT followupactions_request_id_fkey FOREIGN KEY (request_id) REFERENCES followuprequests(id); +--;; + + +-- +-- Name: followuprequests_elector_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followuprequests + ADD CONSTRAINT followuprequests_elector_id_fkey FOREIGN KEY (elector_id) REFERENCES electors(id); +--;; + + +-- +-- Name: followuprequests_issue_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followuprequests + ADD CONSTRAINT followuprequests_issue_id_fkey FOREIGN KEY (issue_id) REFERENCES issues(id); +--;; + + +-- +-- Name: followuprequests_method_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followuprequests + ADD CONSTRAINT followuprequests_method_id_fkey FOREIGN KEY (method_id) REFERENCES followupmethods(id); +--;; + + +-- +-- Name: followuprequests_visit_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY followuprequests + ADD CONSTRAINT followuprequests_visit_id_fkey FOREIGN KEY (visit_id) REFERENCES visits(id); +--;; + + +-- +-- Name: issueexpertise_canvasser_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY issueexpertise + ADD CONSTRAINT issueexpertise_canvasser_id_fkey FOREIGN KEY (canvasser_id) REFERENCES canvassers(id); +--;; + + +-- +-- Name: issueexpertise_issue_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY issueexpertise + ADD CONSTRAINT issueexpertise_issue_id_fkey FOREIGN KEY (issue_id) REFERENCES issues(id); +--;; + + +-- +-- Name: issueexpertise_method_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY issueexpertise + ADD CONSTRAINT issueexpertise_method_id_fkey FOREIGN KEY (method_id) REFERENCES followupmethods(id); +--;; + + +-- +-- Name: visits_address_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY visits + ADD CONSTRAINT visits_address_id_fkey FOREIGN KEY (address_id) REFERENCES addresses(id); +--;; + + +-- +-- Name: visits_canvasser_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: youyesyet +-- + +ALTER TABLE ONLY visits + ADD CONSTRAINT visits_canvasser_id_fkey FOREIGN KEY (canvasser_id) REFERENCES canvassers(id); +--;; + + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +--;; + +REVOKE ALL ON SCHEMA public FROM postgres; +--;; + +GRANT ALL ON SCHEMA public TO postgres; +--;; + +GRANT ALL ON SCHEMA public TO PUBLIC; +--;; + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/resources/templates/home.html b/resources/templates/home.html index 58fe3fc..7509df9 100644 --- a/resources/templates/home.html +++ b/resources/templates/home.html @@ -3,15 +3,15 @@
-If you're seeing this message, that means you haven't yet compiled your ClojureScript!
Please run lein figwheel
to start the ClojureScript compiler and reload the page.