Initial Plugin Commit
This commit is contained in:
178
data/schema.sql
Normal file
178
data/schema.sql
Normal file
@@ -0,0 +1,178 @@
|
||||
INSERT INTO version_history (component, from_version, to_version, author) VALUES ('EVENT_TRACKER', 0, 1, 'Initial Creation');
|
||||
|
||||
-- TODO: Assert profiles data version
|
||||
|
||||
-- Twitch tracked event data {{{
|
||||
|
||||
CREATE TABLE tracking_channels(
|
||||
userid TEXT PRIMARY KEY REFERENCES bot_channels(userid) ON DELETE CASCADE,
|
||||
joined BOOLEAN,
|
||||
joined_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
_timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
CREATE TRIGGER tracking_channels_timestamp BEFORE UPDATE ON tracking_channels
|
||||
FOR EACH ROW EXECUTE FUNCTION update_timestamp_column();
|
||||
|
||||
CREATE TABLE events(
|
||||
event_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
event_type TEXT NOT NULL,
|
||||
communityid INTEGER NOT NULL REFERENCES communities (communityid),
|
||||
channel_id TEXT NOT NULL,
|
||||
profileid INTEGER REFERENCES user_profiles (profileid),
|
||||
user_id TEXT,
|
||||
occurred_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
UNIQUE (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE follow_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'follow' CHECK (event_type = 'follow'),
|
||||
follower_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE bits_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'bits' CHECK (event_type = 'bits'),
|
||||
bits INTEGER NOT NULL,
|
||||
bits_type TEXT NOT NULL,
|
||||
message TEXT,
|
||||
powerup_type TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE subscribe_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'subscribe' CHECK (event_type = 'subscribe'),
|
||||
tier INTEGER NOT NULL,
|
||||
gifted BOOLEAN NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE gift_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'gift' CHECK (event_type = 'gift'),
|
||||
tier INTEGER NOT NULL,
|
||||
gifted_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE subscribe_message_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'subscribe_message' CHECK (event_type = 'subscribe_message'),
|
||||
tier INTEGER NOT NULL,
|
||||
duration_months INTEGER NOT NULL,
|
||||
cumulative_months INTEGER NOT NULL,
|
||||
streak_months INTEGER,
|
||||
message TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE cheer_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'cheer' CHECK (event_type = 'cheer'),
|
||||
amount INTEGER NOT NULL,
|
||||
message TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE redemption_add_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'redemption_add' CHECK (event_type = 'redemption_add'),
|
||||
redeem_id TEXT NOT NULL,
|
||||
redeem_title TEXT NOT NULL,
|
||||
redeem_cost INTEGER NOT NULL,
|
||||
redemption_id TEXT NOT NULL,
|
||||
redemption_status TEXT NOT NULL,
|
||||
message TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE redemption_update_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'redemption_update' CHECK (event_type = 'redemption_update'),
|
||||
redeem_id TEXT NOT NULL,
|
||||
redeem_title TEXT NOT NULL,
|
||||
redeem_cost INTEGER NOT NULL,
|
||||
redemption_id TEXT NOT NULL,
|
||||
redemption_status TEXT NOT NULL,
|
||||
redeemed_at TIMESTAMPTZ NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE poll_end_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'poll_end' CHECK (event_type = 'poll_end'),
|
||||
poll_id TEXT NOT NULL,
|
||||
poll_title TEXT NOT NULL,
|
||||
poll_choices TEXT NOT NULL,
|
||||
poll_started TIMESTAMPTZ NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE stream_online_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'stream_online' CHECK (event_type = 'stream_online'),
|
||||
stream_id TEXT NOT NULL,
|
||||
stream_type TEXT NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE stream_offline_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'stream_offline' CHECK (event_type = 'stream_offline'),
|
||||
stream_id TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE channel_update_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'channel_update' CHECK (event_type = 'channel_update'),
|
||||
title TEXT,
|
||||
language TEXT,
|
||||
category_id TEXT,
|
||||
category_name TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE vip_add_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'vip_add' CHECK (event_type = 'vip_add'),
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE vip_remove_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'vip_remove' CHECK (event_type = 'vip_remove'),
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE message_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'message' CHECK (event_type = 'message'),
|
||||
message_id TEXT NOT NULL,
|
||||
message_type TEXT NOT NULL,
|
||||
content TEXT,
|
||||
source_channel_id TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE raid_out_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'raidout' CHECK (event_type = 'raidout'),
|
||||
target_id TEXT NOT NULL,
|
||||
target_name TEXT,
|
||||
viewer_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
CREATE TABLE raid_in_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'raidin' CHECK (event_type = 'raidin'),
|
||||
source_id TEXT NOT NULL,
|
||||
source_name TEXT,
|
||||
viewer_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
-- }}}
|
||||
Reference in New Issue
Block a user