-- 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: