summaryrefslogtreecommitdiff
path: root/internal/server/api/migrations
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-02-04 18:52:57 +0200
committerKyren223 <Kyren223@proton.me>2025-02-04 18:52:57 +0200
commiteab8cba4bb37491d5c3b497b98faa7029e7b7300 (patch)
tree15f9994c423d18f0492f97c43bf71a0793e1e6a4 /internal/server/api/migrations
parent42a1ee12c1e64955e6ddd38c34b122c7c10a93f2 (diff)
Refactored the way notifications work on the server-side, next commit
fixes the client to use this new system
Diffstat (limited to 'internal/server/api/migrations')
-rw-r--r--internal/server/api/migrations/20250204150045_last_read_messages.sql39
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/server/api/migrations/20250204150045_last_read_messages.sql b/internal/server/api/migrations/20250204150045_last_read_messages.sql
new file mode 100644
index 0000000..f44436b
--- /dev/null
+++ b/internal/server/api/migrations/20250204150045_last_read_messages.sql
@@ -0,0 +1,39 @@
+-- +goose Up
+CREATE TABLE IF NOT EXISTS last_read_messages (
+ user_id INT NOT NULL REFERENCES users (id),
+ source_id INT NOT NULL, -- frequency_id or receiver_id or sender_id
+ last_read INT NOT NULL,
+ -- can be 0 for "no messages ever read" (null)
+ -- can be between msgs in cases like the message getting deleted
+ PRIMARY KEY (user_id, source_id)
+);
+
+DROP TRIGGER IF EXISTS on_frequency_delete;
+-- +goose StatementBegin
+CREATE TRIGGER IF NOT EXISTS on_frequency_delete
+AFTER DELETE ON frequencies
+BEGIN
+ UPDATE frequencies SET
+ position = position - 1
+ WHERE network_id = OLD.network_id AND position > OLD.position;
+
+ DELETE FROM last_read_messages WHERE source_id = OLD.id;
+END
+-- +goose StatementEnd
+
+DROP TRIGGER IF EXISTS on_user_delete;
+-- +goose StatementBegin
+CREATE TRIGGER IF NOT EXISTS on_user_delete
+AFTER UPDATE OF is_deleted ON users
+WHEN NEW.is_deleted = true
+BEGIN
+ DELETE FROM networks WHERE owner_id = NEW.id;
+ DELETE FROM members WHERE user_id = NEW.id;
+ DELETE FROM trusted_users WHERE trusting_user_id = NEW.id OR trusted_user_id = NEW.id;
+ DELETE FROM blocked_users WHERE blocking_user_id = NEW.id OR blocked_user_id = NEW.id;
+ DELETE FROM last_read_messages WHERE user_id = NEW.id;
+END
+-- +goose StatementEnd
+
+-- +goose Down
+DROP TABLE IF EXISTS last_read_messages;