|
|
|
@ -1,3 +1,56 @@
|
|
|
|
|
--create functions
|
|
|
|
|
DO $$BEGIN
|
|
|
|
|
|
|
|
|
|
IF NOT EXISTS(SELECT 1 from pg_proc WHERE proname = 'function_exists') THEN
|
|
|
|
|
CREATE FUNCTION function_exists(text) RETURNS boolean LANGUAGE plpgsql AS $BODY$
|
|
|
|
|
BEGIN
|
|
|
|
|
RETURN EXISTS(SELECT 1 from pg_proc WHERE proname = $1);
|
|
|
|
|
END $BODY$;
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
IF NOT function_exists('type_exists') THEN
|
|
|
|
|
CREATE FUNCTION type_exists(text) RETURNS boolean LANGUAGE plpgsql AS $BODY$
|
|
|
|
|
BEGIN
|
|
|
|
|
RETURN EXISTS (SELECT 1 FROM pg_type WHERE typname = $1);
|
|
|
|
|
END $BODY$;
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
IF NOT function_exists('cast_to_votetype') THEN
|
|
|
|
|
CREATE FUNCTION cast_to_votetype(text) RETURNS votetype LANGUAGE plpgsql AS $BODY$
|
|
|
|
|
BEGIN
|
|
|
|
|
RETURN CASE WHEN $1::votetype IS NULL THEN 'UPVOTE' ELSE $1::votetype END;
|
|
|
|
|
END $BODY$;
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
IF NOT function_exists('cast_to_posttype') THEN
|
|
|
|
|
CREATE FUNCTION cast_to_posttype(text) RETURNS posttype LANGUAGE plpgsql AS $BODY$
|
|
|
|
|
BEGIN
|
|
|
|
|
RETURN CASE WHEN $1::posttype IS NULL THEN 'MISC' ELSE $1::posttype END;
|
|
|
|
|
END $BODY$;
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
END$$;
|
|
|
|
|
|
|
|
|
|
--create types
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
|
|
|
|
|
IF NOT type_exists('votetype') THEN
|
|
|
|
|
CREATE TYPE votetype AS enum ('DOWNVOTE', 'UPVOTE');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
IF NOT type_exists('posttype') THEN
|
|
|
|
|
CREATE TYPE posttype AS enum ('MISC', 'ACTION', 'IMAGE', 'TEXT');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
IF NOT type_exists('requesttype') THEN
|
|
|
|
|
CREATE TYPE requesttype AS enum ('FRIENDREQUEST');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
END$$;
|
|
|
|
|
|
|
|
|
|
-- create tables
|
|
|
|
|
DO $$ BEGIN
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "user_sessions" (
|
|
|
|
|
"sid" varchar NOT NULL COLLATE "default",
|
|
|
|
|
"sess" json NOT NULL,
|
|
|
|
@ -22,13 +75,13 @@ CREATE TABLE IF NOT EXISTS posts (
|
|
|
|
|
created_at TIMESTAMP DEFAULT now(),
|
|
|
|
|
content text,
|
|
|
|
|
author SERIAL REFERENCES users (id) ON DELETE CASCADE,
|
|
|
|
|
type varchar(16) NOT NULL DEFAULT 'MISC'
|
|
|
|
|
type posttype NOT NULL DEFAULT 'MISC'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS votes (
|
|
|
|
|
user_id SERIAL REFERENCES users (id) ON DELETE CASCADE,
|
|
|
|
|
item_id BIGSERIAL REFERENCES posts (id) ON DELETE CASCADE,
|
|
|
|
|
vote_type varchar(8) DEFAULT 'upvote'
|
|
|
|
|
vote_type votetype DEFAULT 'DOWNVOTE'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS events (
|
|
|
|
@ -63,3 +116,10 @@ CREATE TABLE IF NOT EXISTS user_friends (
|
|
|
|
|
user_id SERIAL REFERENCES users (id) ON DELETE CASCADE,
|
|
|
|
|
friend_id SERIAL REFERENCES users (id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS requests (
|
|
|
|
|
sender SERIAL REFERENCES users (id) ON DELETE CASCADE,
|
|
|
|
|
receiver SERIAL REFERENCES users (id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
END $$;
|
|
|
|
|