Skip to content

Commit cd953a3

Browse files
committed
add user_status_changes table
1 parent 401f8b4 commit cd953a3

6 files changed

+103
-0
lines changed

coderd/database/dump.sql

+38
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/foreign_key_constraint.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- Drop the trigger first
2+
DROP TRIGGER IF EXISTS user_status_change_trigger ON users;
3+
4+
-- Drop the trigger function
5+
DROP FUNCTION IF EXISTS record_user_status_change();
6+
7+
-- Drop the indexes
8+
DROP INDEX IF EXISTS idx_user_status_changes_changed_at;
9+
DROP INDEX IF EXISTS idx_user_status_changes_user_id;
10+
11+
-- Drop the table
12+
DROP TABLE IF EXISTS user_status_changes;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
CREATE TABLE user_status_changes (
2+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
3+
user_id uuid NOT NULL REFERENCES users(id),
4+
new_status user_status NOT NULL,
5+
changed_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
6+
);
7+
8+
COMMENT ON TABLE user_status_changes IS 'Tracks the history of user status changes';
9+
10+
CREATE INDEX idx_user_status_changes_user_id ON user_status_changes(user_id);
11+
CREATE INDEX idx_user_status_changes_changed_at ON user_status_changes(changed_at);
12+
13+
INSERT INTO user_status_changes (
14+
user_id,
15+
new_status,
16+
changed_at
17+
)
18+
SELECT
19+
id,
20+
status,
21+
created_at
22+
FROM users
23+
WHERE NOT deleted;
24+
25+
CREATE FUNCTION record_user_status_change() RETURNS trigger AS $$
26+
BEGIN
27+
IF OLD.status IS DISTINCT FROM NEW.status THEN
28+
INSERT INTO user_status_changes (
29+
user_id,
30+
new_status
31+
) VALUES (
32+
NEW.id,
33+
NEW.status
34+
);
35+
END IF;
36+
RETURN NEW;
37+
END;
38+
$$ LANGUAGE plpgsql;
39+
40+
CREATE TRIGGER user_status_change_trigger
41+
BEFORE UPDATE ON users
42+
FOR EACH ROW
43+
EXECUTE FUNCTION record_user_status_change();

coderd/database/models.go

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/unique_constraint.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)