forked from 2sys/shoutdotdev
58 lines
1.7 KiB
SQL
58 lines
1.7 KiB
SQL
CREATE TABLE IF NOT EXISTS users (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
uid TEXT UNIQUE NOT NULL,
|
|
email TEXT NOT NULL
|
|
);
|
|
CREATE INDEX ON users (uid);
|
|
|
|
CREATE TABLE IF NOT EXISTS csrf_tokens (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL
|
|
);
|
|
CREATE INDEX ON csrf_tokens (created_at);
|
|
|
|
CREATE TABLE teams (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE team_memberships (
|
|
team_id UUID NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (team_id, user_id)
|
|
);
|
|
CREATE INDEX ON team_memberships (team_id);
|
|
CREATE INDEX ON team_memberships (user_id);
|
|
|
|
CREATE TABLE api_keys (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
team_id UUID NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
last_used_at TIMESTAMPTZ
|
|
);
|
|
CREATE INDEX ON api_Keys (team_id);
|
|
|
|
CREATE TABLE projects (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
team_id UUID NOT NULL REFERENCES teams(id),
|
|
name TEXT NOT NULL,
|
|
UNIQUE (team_id, name)
|
|
);
|
|
CREATE INDEX ON projects(team_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS channels (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
team_id UUID NOT NULL REFERENCES teams(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
enable_by_default BOOLEAN NOT NULL DEFAULT FALSE,
|
|
backend_config JSONB NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS channel_selections (
|
|
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
channel_id UUID NOT NULL REFERENCES channels(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (project_id, channel_id)
|
|
);
|
|
CREATE INDEX ON channel_selections (project_id);
|
|
CREATE INDEX ON channel_selections (channel_id);
|