345 lines
9.5 KiB
SQL
345 lines
9.5 KiB
SQL
------------------------------------------------------------------------------;
|
|
----
|
|
---- youyesyet.routes.authenticated: routes and pages for authenticated users.
|
|
----
|
|
---- 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
|
|
----
|
|
------------------------------------------------------------------------------;
|
|
|
|
-- This file gets slurped in and converted into simple functions by the line
|
|
-- in youyesyet.db.core.clj:
|
|
-- (conman/bind-connection *db* "sql/queries.sql")
|
|
-- the functions then appeare in the youyesyet.db.core namespace.
|
|
|
|
-- :name create-address! :! :n
|
|
-- :doc creates a new address record
|
|
INSERT INTO addresses
|
|
(address, postcode, district_id, latitude, longitude)
|
|
VALUES (:address, :postcode, :district, :latitude, :longitude)
|
|
RETURNING id
|
|
|
|
-- :name update-address! :! :n
|
|
-- :doc update an existing address record
|
|
UPDATE addresses
|
|
SET address = :address, postcode = :postcode, latitude = :latitude, longitude = :longitude
|
|
WHERE id = :id
|
|
|
|
-- :name get-address :? :1
|
|
-- :doc retrieve a address given the id.
|
|
SELECT * FROM addresses
|
|
WHERE id = :id
|
|
|
|
-- :name get-addresses-by-postcode
|
|
|
|
-- :name delete-address! :! :n
|
|
-- :doc delete a address given the id
|
|
DELETE FROM addresses
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-authority! :! :n
|
|
-- :doc creates a new authority record
|
|
INSERT INTO authorities
|
|
(id)
|
|
VALUES (:id)
|
|
RETURNING id
|
|
|
|
-- :name update-authority! :! :n
|
|
-- :doc update an existing authority record
|
|
UPDATE authorities
|
|
SET id = :id
|
|
WHERE id = :id
|
|
|
|
-- :name get-authority :? :1
|
|
-- :doc retrieve a authority given the id.
|
|
SELECT * FROM authorities
|
|
WHERE id = :id
|
|
|
|
-- :name get-authorities :? :0
|
|
-- :doc retrieve all authorities
|
|
SELECT id FROM authorities
|
|
|
|
-- :name delete-authority! :! :n
|
|
-- :doc delete a authority given the id
|
|
DELETE FROM authorities
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-canvasser! :! :n
|
|
-- :doc creates a new canvasser record
|
|
INSERT INTO canvassers
|
|
(username, fullname, elector_id, dwelling_id, phone, email, authority_id, authorised)
|
|
VALUES (:username, :fullname, :elector_id, :dwelling_id, :phone, :email, :authority_id, :authorised)
|
|
RETURNING id
|
|
|
|
-- :name update-canvasser! :! :n
|
|
-- :doc update an existing canvasser record
|
|
UPDATE canvassers
|
|
SET username = :username, fullname = :fullname, elector_id = :elector_id, dwelling_id = :dwelling_id, phone = :phone, email = :email, authority_id = :authority_id, authorised = :authorised
|
|
WHERE id = :id
|
|
|
|
-- :name get-canvasser :? :1
|
|
-- :doc retrieve a canvasser given the id.
|
|
SELECT * FROM canvassers
|
|
WHERE id = :id
|
|
|
|
-- :name get-canvasser-by-username :? :1
|
|
-- :doc rerieve a canvasser given the username.
|
|
SELECT * FROM canvassers
|
|
WHERE username = :username
|
|
|
|
-- :name get-canvasser-by-email :? :1
|
|
-- :doc rerieve a canvasser given the email address.
|
|
SELECT * FROM canvassers
|
|
WHERE email = :email
|
|
|
|
-- :name delete-canvasser! :! :n
|
|
-- :doc delete a canvasser given the id
|
|
DELETE FROM canvassers
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-district! :! :n
|
|
-- :doc creates a new district record
|
|
INSERT INTO districts
|
|
(id, name)
|
|
VALUES (:id, :name)
|
|
RETURNING id
|
|
|
|
-- :name update-district! :! :n
|
|
-- :doc update an existing district record
|
|
UPDATE districts
|
|
SET name = :name
|
|
WHERE id = :id
|
|
|
|
-- :name get-district :? :1
|
|
-- :doc retrieve a district given the id.
|
|
SELECT * FROM districts
|
|
WHERE id = :id
|
|
|
|
-- :name delete-district! :! :n
|
|
-- :doc delete a district given the id
|
|
DELETE FROM districts
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name get-dwelling :? :1
|
|
-- :doc retrieve a dwelling given the id.
|
|
SELECT * FROM dwellings
|
|
WHERE id = :id
|
|
|
|
-- :name delete-dwelling! :! :n
|
|
-- :doc delete a dwelling given the id
|
|
DELETE FROM dwellings
|
|
WHERE id = :id
|
|
|
|
-- :name create-dwelling! :! :n
|
|
-- :doc creates a new dwelling record
|
|
INSERT INTO dwellings
|
|
(id, address_id, sub_address)
|
|
VALUES (:id, :address_id, :sub_address)
|
|
RETURNING id
|
|
|
|
-- :name update-dwelling! :! :n
|
|
-- :doc update an existing dwelling record
|
|
UPDATE dwellings
|
|
SET address_id = :address_id,
|
|
sub_address = :sub_address
|
|
WHERE id = :id
|
|
|
|
-- :name get-dwelling :? :1
|
|
-- :doc retrieve a dwelling given the id.
|
|
SELECT * FROM dwellings
|
|
WHERE id = :id
|
|
|
|
-- :name delete-dwelling! :! :n
|
|
-- :doc delete a dwelling given the id
|
|
DELETE FROM dwellings
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-elector! :! :n
|
|
-- :doc creates a new elector record
|
|
INSERT INTO electors
|
|
(name, dwelling_id, phone, email)
|
|
VALUES (:name, :dwelling_id, :phone, :email)
|
|
RETURNING id
|
|
|
|
-- :name update-elector! :! :n
|
|
-- :doc update an existing elector record
|
|
UPDATE electors
|
|
SET name = :name, dwelling_id = :dwelling_id, phone = :phone, email = :email
|
|
WHERE id = :id
|
|
|
|
-- :name get-elector :? :1
|
|
-- :doc retrieve a elector given the id.
|
|
SELECT * FROM electors
|
|
WHERE id = :id
|
|
|
|
-- :name delete-elector! :! :n
|
|
-- :doc delete a elector given the id
|
|
DELETE FROM electors
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-followupaction! :! :n
|
|
-- :doc creates a new followupaction record
|
|
INSERT INTO followupactions
|
|
(request_id, actor, date, notes, closed)
|
|
VALUES (:request_id, :actor, :date, :notes, :closed)
|
|
RETURNING id
|
|
|
|
-- We don't update followup actions. They're permanent record.
|
|
|
|
-- :name get-followupaction :? :1
|
|
-- :doc retrieve a followupaction given the id.
|
|
SELECT * FROM followupactions
|
|
WHERE id = :id
|
|
|
|
-- We don't delete followup actions. They're permanent record.
|
|
|
|
|
|
-- followup methods are reference data, do not need to be programmatically maintained.
|
|
|
|
|
|
-- :name create-followuprequest! :! :n
|
|
-- :doc creates a new followupaction record
|
|
INSERT INTO followuprequests
|
|
(elector_id, visit_id, issue_id, method_id)
|
|
VALUES (:elector_id, :visit_id, :issue_id, :method_id)
|
|
RETURNING id
|
|
|
|
-- We don't update followup requests. They're permanent record.
|
|
|
|
-- :name get-followuprequest :? :1
|
|
-- :doc retrieve a followupaction given the id.
|
|
SELECT * FROM followuprequests
|
|
WHERE id = :id
|
|
|
|
-- We don't delete followup requests. They're permanent record.
|
|
|
|
|
|
-- :name create-issueexpertise! :! :n
|
|
-- :doc creates a new issueexpertise record
|
|
INSERT INTO issueexpertise
|
|
(canvasser_id, issue_id, method_id)
|
|
VALUES (:canvasser_id, :issue_id, :method_id)
|
|
-- issueexertise is a link table, doesn't have an id field.
|
|
|
|
-- :name update-issueexpertise! :! :n
|
|
-- :doc update an existing issueexpertise record
|
|
UPDATE issueexpertise
|
|
SET canvasser_id = :canvasser_id, issue_id = :issue_id, method_id = :method_id
|
|
WHERE id = :id
|
|
|
|
-- :name get-issueexpertise :? :1
|
|
-- :doc retrieve a issueexpertise given the canvasser_id -
|
|
-- getting it by its own id is unlikely to be interesting or useful.
|
|
SELECT * FROM issueexpertise
|
|
WHERE canvasser_id = :canvasser_id
|
|
|
|
-- :name delete-issueexpertise! :! :n
|
|
-- :doc delete a issueexpertise given the id
|
|
DELETE FROM issueexpertise
|
|
WHERE id = :id
|
|
|
|
|
|
-- :name create-issue! :! :n
|
|
-- :doc creates a new issue record
|
|
INSERT INTO issues
|
|
(id, url, content, current)
|
|
VALUES (:id, :url, :content, :current)
|
|
RETURNING id
|
|
|
|
|
|
-- :name update-issue! :! :n
|
|
-- :doc update an existing issue record
|
|
UPDATE issues
|
|
SET url = :url, content = :content, current = :current
|
|
WHERE id = :id
|
|
|
|
-- :name get-issue :? :1
|
|
-- :doc retrieve a issue given the id -
|
|
SELECT * FROM issues
|
|
WHERE id = :id
|
|
|
|
-- :name delete-issue! :! :n
|
|
-- :doc delete a issue given the id
|
|
DELETE FROM issues
|
|
WHERE id = :id
|
|
|
|
|
|
-- options is virtually reference data; it's not urgent to create a programmatic means of editing
|
|
|
|
-- :name create-visit! :! :n
|
|
-- :doc creates a new visit record
|
|
INSERT INTO visits
|
|
(dwelling_id, canvasser_id)
|
|
VALUES (:dwelling_id, :canvasser_id)
|
|
RETURNING id
|
|
|
|
-- visits is audit data; we don't update it.
|
|
|
|
-- :name get-visit :? :1
|
|
-- :doc retrieve a visit given the id.
|
|
SELECT * FROM visits
|
|
WHERE id = :id
|
|
|
|
-- 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-canvassers-by-search :? :*
|
|
-- :doc Get details of all authorised canvassers whose details match this search string.
|
|
select * from canvassers
|
|
where name like '%' || :search || '%'
|
|
or username like '%' || :search || '%'
|
|
or email like '%' || :search || '%'
|
|
|
|
-- :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
|
|
|