15 lines
810 B
SQL
15 lines
810 B
SQL
-- Aggregated like notifications.
|
|
--
|
|
-- Likes are high-volume, so instead of one notification row per like we keep a
|
|
-- single row per (recipient, post) and aggregate: actor_id holds the most
|
|
-- recent liker, actor_count how many distinct likers have aggregated into it.
|
|
-- The partial unique index lets the like path UPSERT that one row (bumping the
|
|
-- count, refreshing the actor, re-marking unread) — so the activity list shows
|
|
-- "X and N others liked your post", not a flood.
|
|
ALTER TABLE notifications ADD COLUMN IF NOT EXISTS post_id UUID REFERENCES posts(id) ON DELETE CASCADE;
|
|
ALTER TABLE notifications ADD COLUMN IF NOT EXISTS actor_count INTEGER NOT NULL DEFAULT 1;
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS notifications_post_like_uq
|
|
ON notifications (user_id, post_id)
|
|
WHERE kind = 'post_like';
|