107 lines
2.6 KiB
PL/PgSQL
107 lines
2.6 KiB
PL/PgSQL
-- Metadata {{{
|
|
CREATE TABLE VersionHistory(
|
|
version INTEGER NOT NULL,
|
|
time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
author TEXT
|
|
);
|
|
INSERT INTO VersionHistory (version, author) VALUES (1, 'Initial Creation');
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION update_timestamp_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW._timestamp = (now() at time zone 'utc');
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
-- }}}
|
|
|
|
-- App metadata {{{
|
|
|
|
CREATE TABLE app_config(
|
|
appname TEXT PRIMARY KEY,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE bot_config(
|
|
appname TEXT PRIMARY KEY REFERENCES app_config(appname) ON DELETE CASCADE,
|
|
sponsor_prompt TEXT,
|
|
sponsor_message TEXT,
|
|
default_skin TEXT
|
|
);
|
|
-- }}}
|
|
|
|
-- Channel Linker {{{
|
|
|
|
CREATE TABLE links(
|
|
linkid SERIAL PRIMARY KEY,
|
|
name TEXT
|
|
);
|
|
|
|
CREATE TABLE channel_webhooks(
|
|
channelid BIGINT PRIMARY KEY,
|
|
webhookid BIGINT NOT NULL,
|
|
token TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE channel_links(
|
|
linkid INTEGER NOT NULL REFERENCES links (linkid) ON DELETE CASCADE,
|
|
channelid BIGINT NOT NULL REFERENCES channel_webhooks (channelid) ON DELETE CASCADE,
|
|
PRIMARY KEY (linkid, channelid)
|
|
);
|
|
|
|
|
|
-- }}}
|
|
|
|
-- Stream Alerts {{{
|
|
|
|
-- DROP TABLE IF EXISTS stream_alerts;
|
|
-- DROP TABLE IF EXISTS streams;
|
|
-- DROP TABLE IF EXISTS alert_channels;
|
|
-- DROP TABLE IF EXISTS streamers;
|
|
|
|
CREATE TABLE streamers(
|
|
userid BIGINT PRIMARY KEY,
|
|
login_name TEXT NOT NULL,
|
|
display_name TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE alert_channels(
|
|
subscriptionid SERIAL PRIMARY KEY,
|
|
guildid BIGINT NOT NULL,
|
|
channelid BIGINT NOT NULL,
|
|
streamerid BIGINT NOT NULL REFERENCES streamers (userid) ON DELETE CASCADE,
|
|
created_by BIGINT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
paused BOOLEAN NOT NULL DEFAULT FALSE,
|
|
end_delete BOOLEAN NOT NULL DEFAULT FALSE,
|
|
live_message TEXT,
|
|
end_message TEXT
|
|
);
|
|
CREATE INDEX alert_channels_guilds ON alert_channels (guildid);
|
|
CREATE UNIQUE INDEX alert_channels_channelid_streamerid ON alert_channels (channelid, streamerid);
|
|
|
|
CREATE TABLE streams(
|
|
streamid SERIAL PRIMARY KEY,
|
|
streamerid BIGINT NOT NULL REFERENCES streamers (userid) ON DELETE CASCADE,
|
|
start_at TIMESTAMPTZ NOT NULL,
|
|
twitch_stream_id BIGINT,
|
|
game_name TEXT,
|
|
title TEXT,
|
|
end_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE TABLE stream_alerts(
|
|
alertid SERIAL PRIMARY KEY,
|
|
streamid INTEGER NOT NULL REFERENCES streams (streamid) ON DELETE CASCADE,
|
|
subscriptionid INTEGER NOT NULL REFERENCES alert_channels (subscriptionid) ON DELETE CASCADE,
|
|
sent_at TIMESTAMPTZ NOT NULL,
|
|
messageid BIGINT NOT NULL,
|
|
resolved_at TIMESTAMPTZ
|
|
);
|
|
|
|
|
|
-- }}}
|
|
|
|
-- vim: set fdm=marker:
|