95 lines
3 KiB
MySQL
95 lines
3 KiB
MySQL
|
|
-- Users --
|
||
|
|
|
||
|
|
create table if not exists users (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
uid text unique not null,
|
||
|
|
email text not null
|
||
|
|
);
|
||
|
|
create index on users (uid);
|
||
|
|
|
||
|
|
-- async_session Browser Sessions --
|
||
|
|
|
||
|
|
create table if not exists browser_sessions (
|
||
|
|
id text not null primary key,
|
||
|
|
serialized text not null,
|
||
|
|
created_at timestamptz not null default now(),
|
||
|
|
expiry timestamptz
|
||
|
|
);
|
||
|
|
create index on browser_sessions (expiry);
|
||
|
|
create index on browser_sessions (created_at);
|
||
|
|
|
||
|
|
-- Workspaces --
|
||
|
|
|
||
|
|
create table if not exists workspaces (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
name text not null default '',
|
||
|
|
url text not null,
|
||
|
|
owner_id uuid not null references users(id) on delete restrict
|
||
|
|
);
|
||
|
|
create index on workspaces (owner_id);
|
||
|
|
|
||
|
|
create table if not exists workspace_user_perms (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
workspace_id uuid not null references workspaces(id) on delete cascade,
|
||
|
|
user_id uuid not null references users(id) on delete cascade,
|
||
|
|
perm text not null,
|
||
|
|
unique (workspace_id, user_id, perm)
|
||
|
|
);
|
||
|
|
create index on workspace_user_perms (user_id);
|
||
|
|
create index on workspace_user_perms (workspace_id);
|
||
|
|
|
||
|
|
-- Relation Invitations --
|
||
|
|
|
||
|
|
create table if not exists rel_invitations (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
email text not null,
|
||
|
|
workspace_id uuid not null references workspaces(id) on delete cascade,
|
||
|
|
class_oid oid not null,
|
||
|
|
created_by uuid not null references users(id) on delete restrict,
|
||
|
|
privilege text not null,
|
||
|
|
expires_at timestamptz,
|
||
|
|
unique (email, workspace_id, class_oid, privilege)
|
||
|
|
);
|
||
|
|
create index on rel_invitations (workspace_id, class_oid);
|
||
|
|
create index on rel_invitations (email);
|
||
|
|
|
||
|
|
-- Portals --
|
||
|
|
|
||
|
|
create table if not exists portals (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
name text not null,
|
||
|
|
workspace_id uuid not null references workspaces(id) on delete cascade,
|
||
|
|
class_oid oid not null,
|
||
|
|
table_filter jsonb not null default 'null',
|
||
|
|
table_order_by jsonb not null default '[]'
|
||
|
|
);
|
||
|
|
create index on portals (workspace_id);
|
||
|
|
|
||
|
|
create table if not exists fields (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
portal_id uuid not null references portals(id) on delete cascade,
|
||
|
|
name text not null,
|
||
|
|
presentation jsonb not null,
|
||
|
|
table_label text,
|
||
|
|
table_width_px int not null default 200
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Forms --
|
||
|
|
|
||
|
|
create table if not exists form_transitions (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
source_id uuid not null references portals(id) on delete cascade,
|
||
|
|
dest_id uuid not null references portals(id) on delete restrict,
|
||
|
|
condition jsonb not null default 'null'
|
||
|
|
);
|
||
|
|
create index on form_transitions (source_id);
|
||
|
|
|
||
|
|
create table if not exists field_form_prompts (
|
||
|
|
id uuid not null primary key default uuidv7(),
|
||
|
|
field_id uuid not null references fields(id) on delete cascade,
|
||
|
|
language text not null,
|
||
|
|
content text not null default '',
|
||
|
|
unique (field_id, language)
|
||
|
|
);
|
||
|
|
create index on field_form_prompts (field_id);
|