386 lines
8.5 KiB
SQL
386 lines
8.5 KiB
SQL
-- Create Postgres tables
|
|
create table if not exists oauth2_state_storage (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
csrf_state text NOT NULL,
|
|
pkce_code_verifier text NOT NULL,
|
|
return_url text NOT NULL
|
|
);
|
|
|
|
create table if not exists user_sessions (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
user_id uuid NOT NULL,
|
|
session_token_p1 text NOT NULL,
|
|
session_token_p2 text NOT NULL,
|
|
created_at timestamp NOT NULL,
|
|
expires_at timestamp NOT NULL
|
|
);
|
|
|
|
create table if not exists users (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp NOT NULL default now(),
|
|
created_by uuid NOT NULL,
|
|
updated_at timestamp NOT NULL default now(),
|
|
updated_by uuid NOT NULL,
|
|
email text NOT NULL UNIQUE,
|
|
"name" text NOT NULL,
|
|
family_name text NOT NULL,
|
|
given_name text NOT NULL
|
|
);
|
|
|
|
create table IF NOT EXISTS roles (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp NOT NULL default now(),
|
|
created_by uuid NOT NULL,
|
|
updated_at timestamp NOT NULL default now(),
|
|
updated_by uuid NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT
|
|
);
|
|
|
|
create table IF NOT EXISTS user_roles (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp NOT NULL default now(),
|
|
created_by uuid NOT NULL,
|
|
updated_at timestamp NOT NULL default now(),
|
|
updated_by uuid NOT NULL,
|
|
user_id uuid NOT NULL,
|
|
role_id uuid NOT NULL
|
|
);
|
|
|
|
create unique index if not exists unique_user_role on user_roles(user_id, role_id);
|
|
|
|
create table IF NOT EXISTS role_permissions (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp NOT NULL default now(),
|
|
created_by uuid NOT NULL,
|
|
updated_at timestamp NOT NULL default now(),
|
|
updated_by uuid NOT NULL,
|
|
role_id uuid NOT NULL,
|
|
item text NOT NULL
|
|
);
|
|
|
|
create table if not exists wishlist_items (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid null,
|
|
updated_at timestamp null default now(),
|
|
updated_by uuid null,
|
|
user_id uuid null,
|
|
item varchar(512) null,
|
|
item_url varchar(1024) null,
|
|
purchased_by uuid null,
|
|
received_at timestamp null
|
|
);
|
|
|
|
create table if not exists gift_exchange (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid not null,
|
|
updated_at timestamp not null default now(),
|
|
updated_by uuid not null,
|
|
"name" varchar(255) not null,
|
|
exchange_date timestamp not null,
|
|
"status" INTEGER not null default 0
|
|
);
|
|
|
|
create table if not exists gift_exchange_participants (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid not null,
|
|
updated_at timestamp not null default now(),
|
|
updated_by uuid not null,
|
|
exchange_id uuid not null,
|
|
participant_id uuid not null,
|
|
gifter_id uuid not null
|
|
);
|
|
|
|
-- Calendars
|
|
-- 1 - Cottage
|
|
-- 2 - Family tree
|
|
create table if not exists calendar (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid not null,
|
|
updated_at timestamp null default now(),
|
|
updated_by uuid not null,
|
|
"name" varchar(255) not null
|
|
);
|
|
|
|
-- Event types
|
|
-- 1 - Rental
|
|
-- 2 - Life event
|
|
create table if not exists calendar_event_types (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid not null,
|
|
updated_at timestamp null default now(),
|
|
updated_by uuid not null,
|
|
"name" varchar(255) not null
|
|
);
|
|
|
|
create table if not exists calendar_events (
|
|
id uuid PRIMARY KEY default gen_random_uuid(),
|
|
created_at timestamp not null default now(),
|
|
created_by uuid not null,
|
|
updated_at timestamp null default now(),
|
|
updated_by uuid not null,
|
|
calendar_id uuid not null,
|
|
event_type_id uuid not null,
|
|
title varchar(255) not null,
|
|
"description" varchar(255) null,
|
|
start_time timestamp null,
|
|
end_time timestamp null,
|
|
repeat_type integer not null default 0,
|
|
-- 0 - None, 1 - Daily, 2 - Weekly, 3 - Monthly, 4 - Yearly, 5 - Day of week, 6 - Day of month
|
|
repeat_interval integer not null default 0,
|
|
celebrate boolean not null default true
|
|
);
|
|
|
|
do $$
|
|
|
|
declare user_uuid uuid := gen_random_uuid();
|
|
|
|
begin -- Initial user
|
|
insert into users (
|
|
id,
|
|
"name",
|
|
created_by,
|
|
updated_by,
|
|
email,
|
|
family_name,
|
|
given_name
|
|
)
|
|
values
|
|
(
|
|
user_uuid,
|
|
'admin',
|
|
user_uuid,
|
|
user_uuid,
|
|
'admin@jean-marie.ca',
|
|
'',
|
|
'admin'
|
|
);
|
|
|
|
-- Initial roles
|
|
INSERT INTO
|
|
roles (created_by, updated_by, "name", "description")
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
'public',
|
|
'Users with only anonymous access'
|
|
);
|
|
|
|
INSERT INTO
|
|
roles (created_by, updated_by, "name", "description")
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
'normal',
|
|
'Users with no elevated privileges'
|
|
);
|
|
|
|
INSERT INTO
|
|
roles (created_by, updated_by, "name", "description")
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
'editor',
|
|
'Users with basic elevated privileges'
|
|
);
|
|
|
|
INSERT INTO
|
|
roles (created_by, updated_by, "name", "description")
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
'admin',
|
|
'Users with full administrative privileges'
|
|
);
|
|
|
|
INSERT INTO
|
|
roles (created_by, updated_by, "name", "description")
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
'calendar',
|
|
'Users with access to the calendar'
|
|
);
|
|
|
|
-- Initial permissions
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'public'
|
|
),
|
|
'/'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'public'
|
|
),
|
|
'/login'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'public'
|
|
),
|
|
'/logout'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'normal'
|
|
),
|
|
'/dashboard'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'normal'
|
|
),
|
|
'/profile'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'admin'
|
|
),
|
|
'/useradmin'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'admin'
|
|
),
|
|
'/users'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'calendar'
|
|
),
|
|
'/calendar'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'normal'
|
|
),
|
|
'/wishlist'
|
|
);
|
|
|
|
INSERT INTO
|
|
role_permissions (created_by, updated_by, role_id, item)
|
|
VALUES
|
|
(
|
|
user_uuid,
|
|
user_uuid,
|
|
(
|
|
SELECT
|
|
id
|
|
FROM
|
|
roles
|
|
WHERE
|
|
"name" = 'normal'
|
|
),
|
|
'/giftexchange'
|
|
);
|
|
|
|
end $$; |