CREATE TYPE public.userlevel AS ENUM ('Admin', 'User', 'Devel'); CREATE TABLE public.user ( id SERIAL PRIMARY KEY, name character varying(250), email character varying(250), password character varying(255), ftp_user character varying(250), accesslevel public.userlevel, owner_id integer NOT NULL REFERENCES public.user(id), UNIQUE(email) ); CREATE TABLE public.access_groups ( id SERIAL PRIMARY KEY, name character varying(255) NOT NULL, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.user_access ( id SERIAL PRIMARY KEY, user_id integer NOT NULL REFERENCES public.user(id), access_group_id integer NOT NULL REFERENCES public.access_groups(id), UNIQUE(user_id, access_group_id) ); CREATE TABLE public.map ( id SERIAL PRIMARY KEY, name character varying(50) NOT NULL, description character varying(50) NOT NULL, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.map_access ( id SERIAL PRIMARY KEY, map_id integer NOT NULL REFERENCES public.map(id), access_group_id integer NOT NULL REFERENCES public.access_groups(id), UNIQUE(map_id, access_group_id) ); CREATE TABLE public.permalink ( id SERIAL PRIMARY KEY, description character varying(255), query character varying(255), map_id integer NOT NULL REFERENCES public.map(id), created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, expires TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + interval '1 hour', visits integer NOT NULL DEFAULT 0, visits_limit integer NOT NULL DEFAULT 1, hash character varying(36) NOT NULL, owner_id integer NOT NULL REFERENCES public.user(id) ); CREATE TABLE public.signup ( id SERIAL PRIMARY KEY, name character varying(250), email character varying(250), password character varying(250), verify character varying(250), UNIQUE(email) );