-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.sql
73 lines (64 loc) Β· 2.33 KB
/
setup.sql
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
-- Schools table
CREATE TABLE
schools (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
NAME TEXT NOT NULL,
canvas_domain TEXT NOT NULL UNIQUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Users table
CREATE TABLE
users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
discord_id BIGINT UNIQUE NOT NULL,
canvas_user_id BIGINT,
canvas_api_token TEXT,
school_id BIGINT REFERENCES schools (id) ON DELETE CASCADE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- User preferences table
CREATE TABLE
user_preferences (
user_id BIGINT PRIMARY KEY REFERENCES users (id) ON DELETE CASCADE,
notification_assignments BOOLEAN DEFAULT TRUE,
notification_announcements BOOLEAN DEFAULT TRUE,
notification_grades BOOLEAN DEFAULT TRUE,
dm_notifications BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Function to update the 'updated_at' column
CREATE
OR REPLACE FUNCTION update_modified_column () RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
-- Function to create default user preferences
CREATE
OR REPLACE FUNCTION create_default_user_preferences () RETURNS TRIGGER AS $$
BEGIN
INSERT INTO user_preferences (user_id)
VALUES (NEW.id);
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
-- Triggers to automatically update 'updated_at'
CREATE TRIGGER update_schools_modtime BEFORE
UPDATE ON schools FOR EACH ROW
EXECUTE FUNCTION update_modified_column ();
CREATE TRIGGER update_users_modtime BEFORE
UPDATE ON users FOR EACH ROW
EXECUTE FUNCTION update_modified_column ();
CREATE TRIGGER update_user_preferences_modtime BEFORE
UPDATE ON user_preferences FOR EACH ROW
EXECUTE FUNCTION update_modified_column ();
-- Trigger to create default user preferences when a new user is inserted
CREATE TRIGGER create_user_preferences_trigger
AFTER INSERT ON users FOR EACH ROW
EXECUTE FUNCTION create_default_user_preferences ();
ALTER TABLE schools ADD CONSTRAINT unique_canvas_domain UNIQUE (canvas_domain);
ALTER TABLE users ALTER COLUMN canvas_api_token TYPE TEXT;