-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathschema.sql
More file actions
99 lines (90 loc) · 3.51 KB
/
Copy pathschema.sql
File metadata and controls
99 lines (90 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
CREATE TABLE guilds (
id TEXT PRIMARY KEY NOT NULL,
banned BOOLEAN NOT NULL DEFAULT FALSE
);
CREATE TABLE webhooks (
id TEXT PRIMARY KEY NOT NULL,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE ON UPDATE CASCADE,
comment TEXT NOT NULL,
broken BOOLEAN NOT NULL DEFAULT FALSE,
secret TEXT NOT NULL,
batch_events BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_by TEXT NOT NULL,
last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_updated_by TEXT NOT NULL
);
CREATE TABLE repos (
id TEXT PRIMARY KEY NOT NULL,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE ON UPDATE CASCADE,
webhook_id TEXT NOT NULL REFERENCES webhooks(id) ON DELETE CASCADE ON UPDATE CASCADE,
repo_name TEXT NOT NULL,
channel_id TEXT NOT NULL,
use_threads BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_by TEXT NOT NULL,
last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_updated_by TEXT NOT NULL
);
CREATE TABLE issue_threads (
id BIGSERIAL PRIMARY KEY,
repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE ON UPDATE CASCADE,
issue_number INTEGER NOT NULL,
kind TEXT NOT NULL CHECK (kind IN ('issue', 'pull_request')),
thread_id TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (repo_id, issue_number, kind)
);
CREATE TABLE event_modifiers (
id TEXT PRIMARY KEY NOT NULL,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE ON UPDATE CASCADE,
webhook_id TEXT NOT NULL REFERENCES webhooks(id) ON DELETE CASCADE ON UPDATE CASCADE,
repo_id TEXT REFERENCES repos(id) ON DELETE CASCADE ON UPDATE CASCADE,
events TEXT[] NOT NULL DEFAULT '{}',
blacklisted boolean not null default false,
whitelisted boolean not null default false,
redirect_channel TEXT,
priority INTEGER NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_by TEXT NOT NULL,
last_updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_updated_by TEXT NOT NULL
);
create table webhook_logs (
log_id text primary key not null,
guild_id TEXT NOT NULL REFERENCES guilds(id) ON DELETE CASCADE ON UPDATE CASCADE,
webhook_id text not null references webhooks (id) ON UPDATE CASCADE ON DELETE CASCADE,
entries text[] not null default '{}'
);
CREATE TABLE bot_heartbeat (
id SMALLINT PRIMARY KEY DEFAULT 1 CHECK (id = 1),
guild_count INTEGER NOT NULL,
member_count BIGINT NOT NULL,
shard_count INTEGER NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE status_snapshots (
id BIGSERIAL PRIMARY KEY,
checked_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
database_up BOOLEAN NOT NULL,
discord_up BOOLEAN NOT NULL,
db_latency_ms INTEGER NOT NULL
);
CREATE TABLE event_metrics (
id BIGSERIAL PRIMARY KEY,
webhook_id TEXT NOT NULL REFERENCES webhooks(id) ON DELETE CASCADE ON UPDATE CASCADE,
repo_id TEXT REFERENCES repos(id) ON DELETE CASCADE ON UPDATE CASCADE,
event_type TEXT NOT NULL,
occurred_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Append-only trail of what an admin did in the bot admin panel (banned a
-- guild, etc.) - separate from webhook_logs, which is per-webhook delivery
-- debug output, not an accountability record.
CREATE TABLE admin_audit_log (
id BIGSERIAL PRIMARY KEY,
admin_user_id TEXT NOT NULL,
action TEXT NOT NULL,
target TEXT,
detail TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);