usefulfiles/scripts/obrand.sql

397 lines
8.8 KiB
MySQL
Raw Normal View History

2016-04-04 12:09:16 +00:00
-- 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;
2016-04-04 12:43:23 +00:00
--
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";
CREATE TABLE "logins" (
"id" serial NOT NULL,
"username" varchar(100) NOT NULL UNIQUE,
"email" varchar(150) NOT NULL UNIQUE,
"password_hash" varchar(78) NOT NULL,
"password_reset_token" varchar(128) UNIQUE,
"uid" varchar(22) UNIQUE,
CONSTRAINT logins_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "profile" (
"id" serial NOT NULL,
"uid" varchar(22) NOT NULL,
"forename" varchar(75) NOT NULL,
"surname" varchar(75) NOT NULL,
"gender" int NOT NULL,
"dob" DATE NOT NULL,
"bio" TEXT NOT NULL,
"member_of" varchar(22),
CONSTRAINT profile_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "company" (
"id" serial NOT NULL,
"cid" varchar(22) not null,
"company_name" varchar(100) NOT NULL,
"address1" varchar(150) NOT NULL,
"address2" varchar(150),
"address3" varchar(150),
"town" varchar(150) NOT NULL,
"county" varchar(150),
"postcode" varchar(12) NOT NULL,
"country" int ,
"pcontact" varchar(20) NOT NULL,
"ocontact" varchar(20),
"mobile" varchar(20) ,
"email" varchar(150) NOT NULL,
CONSTRAINT company_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "venue" (
"id" serial NOT NULL,
"venue_name" varchar(100) NOT NULL,
"address1" varchar(150) NOT NULL,
"address2" varchar(150),
"address3" varchar(150),
"town" varchar(150) NOT NULL,
"county" varchar(150) ,
"postcode" varchar(12) NOT NULL,
"country" int ,
"pcontact" varchar(20) NOT NULL,
"ocontact" varchar(20) ,
"mobile" varchar(20) ,
"email" varchar(150) NOT NULL,
"company_id" int NOT NULL,
CONSTRAINT venue_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "billing" (
"id" serial NOT NULL,
"company_id" int NOT NULL,
CONSTRAINT billing_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "master_beacons" (
"id" bigint NOT NULL,
"uid" uuid NOT NULL,
CONSTRAINT master_beacons_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "pages"
(
id serial NOT NULL,,
cid VARCHAR(22),
vid VARCHAR(22),
pid VARCHAR(22),
content INTEGER,
title VARCHAR(100) NOT NULL,
data JSONB NOT NULL,
CONSTRAINT pages_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
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;
-- Function Builder
--DROP FUNCTION insert_user(character varying,character varying,character varying,character varying);
DROP FUNCTION upsert_profile;
CREATE OR REPLACE FUNCTION insert_user( _username VARCHAR(100), _email VARCHAR(150),
_passwordHash VARCHAR(78), _uid VARCHAR(22))
RETURNS VOID AS
$$
BEGIN
INSERT into logins(username, email, password_hash, uid) Values(_username,_email,_passwordHash,_uid);
END;
$$
LANGUAGE plpgsql;
--
CREATE OR REPLACE FUNCTION upsert_profile(_uid VARCHAR(22), _forename VARCHAR(75), _surname VARCHAR(75),
_gender INTEGER, _dob DATE, _bio TEXT)
RETURNS VOID AS
$$
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;
$$
LANGUAGE plpgsql;
--
;
--DROP FUNCTION upsert_profile(character varying,character varying,character varying,integer,date,text) ;
CREATE OR REPLACE FUNCTION upsert_company(
_cid VARCHAR(22),
_company_name VARCHAR(100),
_address1 VARCHAR(150),
_address2 VARCHAR(150),
_address3 VARCHAR(150),
_town VARCHAR(150),
_county VARCHAR(150),
_postcode VARCHAR(12),
_country INTEGER,
_pcontact VARCHAR(20),
_ocontact VARCHAR(20),
_mobile VARCHAR(20),
_email VARCHAR(150))
RETURNS VOID AS
$$
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;
$$
LANGUAGE plpgsql;
--
;
CREATE OR REPLACE FUNCTION getAccountDetails(
_uid VARCHAR(22))
RETURNS TABLE(id INT, email VARCHAR(150), uid VARCHAR(22), forename VARCHAR(75), surname VARCHAR(75), member_of VARCHAR(22))
AS
$$
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;
$$
LANGUAGE plpgsql;
--
;
CREATE OR REPLACE FUNCTION makeMemberOf(_uid VARCHAR(22), _cid VARCHAR(22))
RETURNS VOID AS
$$
BEGIN
UPDATE profile
SET profile.member_of = _cid
WHERE profile.uid = _uid;
END;
$$
LANGUAGE plpgsql;
--
;
CREATE OR REPLACE FUNCTION upsert_page(_cid VARCHAR(22),
_vid VARCHAR(22), _pid VARCHAR(22), _content INTEGER, _title VARCHAR(100), _data JSONB)
RETURNS VOID AS
$$
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;
$$
LANGUAGE plpgsql;