]> git.sesse.net Git - skvidarsync/blob - skvidarlang.sql
Store OAuth tokens in the database instead of asking for them for every single sync.
[skvidarsync] / skvidarlang.sql
1 CREATE TABLE applied (
2     channel VARCHAR NOT NULL,
3     ts VARCHAR NOT NULL,
4     name VARCHAR NOT NULL,
5     color VARCHAR NOT NULL DEFAULT 'yellow',
6     PRIMARY KEY (channel, ts, name)
7 );
8
9 CREATE TABLE reaction_log (
10     userid VARCHAR NOT NULL,
11     channel VARCHAR NOT NULL,
12     ts VARCHAR NOT NULL,
13     event_type VARCHAR NOT NULL,
14     event_ts VARCHAR NOT NULL,
15     reaction VARCHAR NOT NULL
16 );
17 CREATE INDEX lookup_idx ON reaction_log USING btree (channel, ts, userid, reaction, event_ts DESC);
18
19 CREATE TABLE message_sheet_link (
20     channel VARCHAR NOT NULL,
21     ts VARCHAR NOT NULL,
22     sheet_title VARCHAR NOT NULL,
23     PRIMARY KEY (channel, ts)
24 );
25
26 CREATE TABLE users_nagged (
27     userid VARCHAR NOT NULL,
28     last_nag TIMESTAMP WITH TIME ZONE NOT NULL,
29     PRIMARY KEY (userid)
30 );
31
32 CREATE TABLE group_membership_history (
33     -- (channel, ts) says what event we saw them at (even if they were not actually attending).
34     channel VARCHAR NOT NULL,
35     ts VARCHAR NOT NULL,
36     name VARCHAR NOT NULL,  -- As written in the spreadsheet.
37     change_seen TIMESTAMP WITH TIME ZONE NOT NULL,
38     group_name VARCHAR
39 );
40 CREATE INDEX gmh_lookup_idx ON group_membership_history (channel, ts, name, change_seen DESC);
41
42 CREATE TABLE oauth_tokens (
43     token VARCHAR NOT NULL,
44     acquired TIMESTAMP WITH TIME ZONE NOT NULL,
45     expiry TIMESTAMP WITH TIME ZONE NOT NULL
46 );
47 CREATE INDEX oauth_tokens_exp_idx ON oauth_tokens ( expiry );
48
49 CREATE VIEW current_reactions AS
50   SELECT userid, channel, ts, reaction
51     FROM ( SELECT DISTINCT ON (channel, ts, userid, reaction)
52                userid, channel, ts, event_type, event_ts, reaction
53            FROM reaction_log ORDER BY channel, ts, userid, reaction, event_ts DESC ) t1
54   WHERE event_type = 'reaction_added';
55
56 CREATE VIEW current_group_membership_history AS
57   SELECT DISTINCT ON (channel,ts,name)
58     channel, ts, name, group_name, change_seen
59   FROM group_membership_history
60   ORDER BY channel, ts, name,change_seen DESC;
61
62 GRANT SELECT,UPDATE,INSERT,DELETE ON TABLE applied TO skvidarlang;
63 GRANT SELECT,INSERT ON TABLE reaction_log TO skvidarlang;
64 GRANT SELECT ON TABLE current_reactions TO skvidarlang;
65 GRANT SELECT,UPDATE,INSERT ON TABLE message_sheet_link TO skvidarlang;
66 GRANT SELECT,INSERT ON TABLE users_nagged TO skvidarlang;
67 GRANT SELECT,INSERT ON TABLE group_membership_history TO skvidarlang;
68 GRANT SELECT ON TABLE current_group_membership_history TO skvidarlang;
69 GRANT SELECT,INSERT ON TABLE oauth_tokens TO skvidarlang;