obrand-admin-server/O-BrandServer/obrand.sql
2016-04-08 16:45:02 +01:00

669 lines
16 KiB
PL/PgSQL

-- Database: "oBrand"
DROP DATABASE "oBrand";
-- Role: obrand
DROP ROLE obrand;
CREATE ROLE obrand LOGIN
ENCRYPTED PASSWORD 'md51e16472d06fb312d14e3001f44e9460e'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
CREATE DATABASE "oBrand"
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'C'
LC_CTYPE = 'C'
CONNECTION LIMIT = -1;
GRANT ALL ON DATABASE "oBrand" TO postgres;
GRANT CONNECT ON DATABASE "oBrand" TO obrand;
REVOKE ALL ON DATABASE "oBrand" FROM public;
ALTER DEFAULT PRIVILEGES
GRANT INSERT, SELECT, UPDATE ON TABLES
TO public;
ALTER DEFAULT PRIVILEGES
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES
TO postgres;
--
ALTER TABLE "profile" DROP CONSTRAINT IF EXISTS "profile_fk0";
ALTER TABLE "profile" DROP CONSTRAINT IF EXISTS "profile_fk1";
ALTER TABLE "venue" DROP CONSTRAINT IF EXISTS "venue_fk0";
ALTER TABLE "billing" DROP CONSTRAINT IF EXISTS "billing_fk0";
DROP TABLE IF EXISTS "logins";
DROP TABLE IF EXISTS "profile";
DROP TABLE IF EXISTS "company";
DROP TABLE IF EXISTS "venue";
DROP TABLE IF EXISTS "billing";
DROP TABLE IF EXISTS "master_beacons";
DROP TABLE IF EXISTS "pages";
-- SEQUENCES
-- Sequence: public.billing_id_seq
-- DROP SEQUENCE public.billing_id_seq;
CREATE SEQUENCE public.billing_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE public.billing_id_seq
OWNER TO postgres;
-- Sequence: public.company_id_seq
-- DROP SEQUENCE public.company_id_seq;
CREATE SEQUENCE public.company_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 2
CACHE 1;
ALTER TABLE public.company_id_seq
OWNER TO postgres;
GRANT ALL ON SEQUENCE public.company_id_seq TO postgres;
GRANT SELECT, UPDATE ON SEQUENCE public.company_id_seq TO obrand;
-- Sequence: public.logins_id_seq
-- DROP SEQUENCE public.logins_id_seq;
CREATE SEQUENCE public.logins_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 4
CACHE 1;
ALTER TABLE public.logins_id_seq
OWNER TO postgres;
GRANT ALL ON SEQUENCE public.logins_id_seq TO postgres;
GRANT SELECT, UPDATE ON SEQUENCE public.logins_id_seq TO obrand;
-- Sequence: public.pages_id_seq
-- DROP SEQUENCE public.pages_id_seq;
CREATE SEQUENCE public.pages_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 35
CACHE 1;
ALTER TABLE public.pages_id_seq
OWNER TO postgres;
GRANT ALL ON SEQUENCE public.pages_id_seq TO postgres;
GRANT SELECT, UPDATE ON SEQUENCE public.pages_id_seq TO obrand;
-- Sequence: public.profile_id_seq
-- DROP SEQUENCE public.profile_id_seq;
CREATE SEQUENCE public.profile_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 2
CACHE 1;
ALTER TABLE public.profile_id_seq
OWNER TO postgres;
GRANT ALL ON SEQUENCE public.profile_id_seq TO postgres;
GRANT SELECT, UPDATE ON SEQUENCE public.profile_id_seq TO obrand;
-- Sequence: public.venue_id_seq
-- DROP SEQUENCE public.venue_id_seq;
CREATE SEQUENCE public.venue_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE public.venue_id_seq
OWNER TO postgres;
-- ----
-- Table: public.company
-- DROP TABLE public.company;
CREATE TABLE public.company
(
id integer NOT NULL DEFAULT nextval('company_id_seq'::regclass),
cid character varying(22) NOT NULL,
company_name character varying(100) NOT NULL,
address1 character varying(150) NOT NULL,
address2 character varying(150),
address3 character varying(150),
town character varying(150) NOT NULL,
county character varying(150),
postcode character varying(12) NOT NULL,
country integer,
pcontact character varying(20) NOT NULL,
ocontact character varying(20),
mobile character varying(20),
email character varying(150) NOT NULL,
CONSTRAINT company_pk PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.company
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.company TO public;
GRANT ALL ON TABLE public.company TO postgres;
-- Table: public.billing
-- DROP TABLE public.billing;
CREATE TABLE public.billing
(
id integer NOT NULL DEFAULT nextval('billing_id_seq'::regclass),
company_id integer NOT NULL,
CONSTRAINT billing_pk PRIMARY KEY (id),
CONSTRAINT billing_fk0 FOREIGN KEY (company_id)
REFERENCES public.company (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.billing
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.billing TO public;
GRANT ALL ON TABLE public.billing TO postgres;
-- Table: public.logins
-- DROP TABLE public.logins;
CREATE TABLE public.logins
(
id integer NOT NULL DEFAULT nextval('logins_id_seq'::regclass),
username character varying(100) NOT NULL,
email character varying(150) NOT NULL,
password_hash character varying(78) NOT NULL,
password_reset_token character varying(128),
uid character varying(22),
CONSTRAINT logins_pk PRIMARY KEY (id),
CONSTRAINT logins_email_key UNIQUE (email),
CONSTRAINT logins_password_reset_token_key UNIQUE (password_reset_token),
CONSTRAINT logins_uid_key UNIQUE (uid),
CONSTRAINT logins_username_key UNIQUE (username)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.logins
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.logins TO public;
GRANT ALL ON TABLE public.logins TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLE public.logins TO obrand;
-- Table: public.master_beacons
-- DROP TABLE public.master_beacons;
CREATE TABLE public.master_beacons
(
id bigint NOT NULL,
uid uuid NOT NULL,
CONSTRAINT master_beacons_pk PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.master_beacons
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.master_beacons TO public;
GRANT ALL ON TABLE public.master_beacons TO postgres;
-- Table: public.pages
-- DROP TABLE public.pages;
CREATE TABLE public.pages
(
id integer NOT NULL DEFAULT nextval('pages_id_seq'::regclass),
cid character varying(22),
vid character varying(22),
pid character varying(22),
content integer,
title character varying(100) NOT NULL,
data json NOT NULL,
CONSTRAINT pages_pk PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.pages
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.pages TO public;
GRANT ALL ON TABLE public.pages TO postgres;
-- Table: public.profile
-- DROP TABLE public.profile;
CREATE TABLE public.profile
(
id integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass),
uid character varying(22) NOT NULL,
forename character varying(75) NOT NULL,
surname character varying(75) NOT NULL,
gender integer NOT NULL,
dob date NOT NULL,
bio text NOT NULL,
member_of character varying(22),
CONSTRAINT profile_pk PRIMARY KEY (id),
CONSTRAINT profile_fk0 FOREIGN KEY (uid)
REFERENCES public.logins (uid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.profile
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.profile TO public;
GRANT ALL ON TABLE public.profile TO postgres;
--
-- Table: public.venue
-- DROP TABLE public.venue;
CREATE TABLE public.venue
(
id integer NOT NULL DEFAULT nextval('venue_id_seq'::regclass),
venue_name character varying(100) NOT NULL,
address1 character varying(150) NOT NULL,
address2 character varying(150),
address3 character varying(150),
town character varying(150) NOT NULL,
county character varying(150),
postcode character varying(12) NOT NULL,
country integer,
pcontact character varying(20) NOT NULL,
ocontact character varying(20),
mobile character varying(20),
email character varying(150) NOT NULL,
company_id integer NOT NULL,
CONSTRAINT venue_pk PRIMARY KEY (id),
CONSTRAINT venue_fk0 FOREIGN KEY (company_id)
REFERENCES public.company (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.venue
OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT ON TABLE public.venue TO public;
GRANT ALL ON TABLE public.venue TO postgres;
--
--ALTER TABLE "profile" ADD CONSTRAINT "profile_fk0" FOREIGN KEY ("uid") REFERENCES "logins"("uid");
--ALTER TABLE "profile" ADD CONSTRAINT "profile_fk1" FOREIGN KEY ("member_of") REFERENCES "company"("cid");
--ALTER TABLE "venue" ADD CONSTRAINT "venue_fk0" FOREIGN KEY ("company_id") REFERENCES "company"("id");
--ALTER TABLE "billing" ADD CONSTRAINT "billing_fk0" FOREIGN KEY ("company_id") REFERENCES "company"("id");
grant connect on database "oBrand" to obrand;
GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLE public.logins TO obrand;
grant select, update on logins_id_seq to obrand;
grant select, update on profile_id_seq to obrand;
grant select, update on company_id_seq to obrand;
grant select, update on pages_pk to obrand;
-- functions
-- Function: public.getaccountdetails(character varying)
-- DROP FUNCTION public.getaccountdetails(character varying);
CREATE OR REPLACE FUNCTION public.getaccountdetails(IN _uid character varying)
RETURNS TABLE(id integer, email character varying, uid character varying, forename character varying, surname character varying, member_of character varying) AS
$BODY$
BEGIN
RETURN QUERY
SELECT
logins.id,
logins.email,
logins.uid,
profile.forename,
profile.surname,
profile.member_of
FROM logins
LEFT JOIN profile ON profile.uid = logins.uid
WHERE logins.uid = _uid;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION public.getaccountdetails(character varying)
OWNER TO postgres;
--
-- Function: public.insert_user(character varying, character varying, character varying, character varying)
-- DROP FUNCTION public.insert_user(character varying, character varying, character varying, character varying);
CREATE OR REPLACE FUNCTION public.insert_user(
_username character varying,
_email character varying,
_passwordhash character varying,
_uid character varying)
RETURNS void AS
$BODY$
BEGIN
INSERT into logins(username, email, password_hash, uid) Values(_username,_email,_passwordHash,_uid);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.insert_user(character varying, character varying, character varying, character varying)
OWNER TO postgres;
--
-- Function: public.makememberof(character varying, character varying)
-- DROP FUNCTION public.makememberof(character varying, character varying);
CREATE OR REPLACE FUNCTION public.makememberof(
_uid character varying,
_cid character varying)
RETURNS void AS
$BODY$
BEGIN
UPDATE profile SET member_of = _cid WHERE uid = _uid;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.makememberof(character varying, character varying)
OWNER TO postgres;
--
-- Function: public.upsert_company(character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, integer, character varying, character varying, character varying, character varying)
-- DROP FUNCTION public.upsert_company(character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, integer, character varying, character varying, character varying, character varying);
CREATE OR REPLACE FUNCTION public.upsert_company(
_cid character varying,
_company_name character varying,
_address1 character varying,
_address2 character varying,
_address3 character varying,
_town character varying,
_county character varying,
_postcode character varying,
_country integer,
_pcontact character varying,
_ocontact character varying,
_mobile character varying,
_email character varying)
RETURNS void AS
$BODY$
BEGIN
WITH upsert AS (UPDATE company
SET cid = _cid,
company_name = _company_name,
address1 = _address1,
address2 = _address2,
address3 = _address3,
town = _town,
county = _county,
postcode = _postcode,
country = _country,
pcontact = _pcontact,
ocontact = _ocontact,
mobile = _mobile,
email = _email
WHERE cid = _cid
RETURNING *)
INSERT INTO company (
cid,
company_name,
address1,
address2,
address3,
town,
county,
postcode,
country,
pcontact,
ocontact,
mobile,
email
) SELECT
_cid,
_company_name,
_address1,
_address2,
_address3,
_town,
_county,
_postcode,
_country,
_pcontact,
_ocontact,
_mobile,
_email
WHERE NOT EXISTS(SELECT *
FROM upsert);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.upsert_company(character varying, character varying, character varying, character varying, character varying, character varying, character varying, character varying, integer, character varying, character varying, character varying, character varying)
OWNER TO postgres;
--
-- Function: public.upsert_page(character varying, character varying, character varying, integer, character varying, json)
-- DROP FUNCTION public.upsert_page(character varying, character varying, character varying, integer, character varying, json);
CREATE OR REPLACE FUNCTION public.upsert_page(
_cid character varying,
_vid character varying,
_pid character varying,
_content integer,
_title character varying,
_data json)
RETURNS void AS
$BODY$
BEGIN
WITH upsert AS (UPDATE pages
SET cid = _cid, vid = _vid, content = _content, title = _title, data = _data
WHERE pid = _pid
RETURNING *)
INSERT INTO pages (cid, vid, pid, content, title, data) SELECT
_cid,
_vid,
_pid,
_content,
_title,
_data
WHERE NOT EXISTS(SELECT *
FROM upsert);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.upsert_page(character varying, character varying, character varying, integer, character varying, json)
OWNER TO postgres;
--
-- Function: public.upsert_profile(character varying, character varying, character varying, integer, date, text)
-- DROP FUNCTION public.upsert_profile(character varying, character varying, character varying, integer, date, text);
CREATE OR REPLACE FUNCTION public.upsert_profile(
_uid character varying,
_forename character varying,
_surname character varying,
_gender integer,
_dob date,
_bio text)
RETURNS void AS
$BODY$
BEGIN
WITH upsert AS (UPDATE profile
SET forename = _forename, surname = _surname, gender = _gender, dob = _dob, bio = _bio
WHERE uid = _uid
RETURNING *)
INSERT INTO profile (uid, forename, surname, gender, dob, bio) SELECT
_uid,
_forename,
_surname,
_gender,
_dob,
_bio
WHERE NOT EXISTS(SELECT *
FROM upsert);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.upsert_profile(character varying, character varying, character varying, integer, date, text)
OWNER TO postgres;