mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
- Couple streaks with milestone notifications - Scheduled pack releases with admin UI - Notification preferences screen - Refactored profile settings screens - Partner activity notifications
45 lines
2.1 KiB
SQL
45 lines
2.1 KiB
SQL
-- Add deleted_at column to messages table for "delete for everyone"
|
|
ALTER TABLE messages ADD COLUMN deleted_at TIMESTAMPTZ;
|
|
-- Create message_deletions table for "delete for self" (per-user deletions)
|
|
CREATE TABLE message_deletions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
message_id UUID NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
deleted_at TIMESTAMPTZ DEFAULT now(),
|
|
UNIQUE(message_id, user_id)
|
|
);
|
|
-- Index for efficient lookup when filtering messages
|
|
CREATE INDEX idx_message_deletions_user_message ON message_deletions(user_id, message_id);
|
|
CREATE INDEX idx_messages_deleted_at ON messages(deleted_at) WHERE deleted_at IS NOT NULL;
|
|
-- Enable RLS on message_deletions
|
|
ALTER TABLE message_deletions ENABLE ROW LEVEL SECURITY;
|
|
-- RLS Policies for message_deletions
|
|
|
|
-- Users can view their own deletions (needed for filtering)
|
|
CREATE POLICY "Users can view own deletions"
|
|
ON message_deletions FOR SELECT
|
|
USING (user_id = auth.uid());
|
|
-- Users can insert their own deletions (for messages in their matches)
|
|
CREATE POLICY "Users can delete messages for self"
|
|
ON message_deletions FOR INSERT
|
|
WITH CHECK (
|
|
user_id = auth.uid() AND
|
|
EXISTS (
|
|
SELECT 1 FROM messages m
|
|
JOIN matches ma ON ma.id = m.match_id
|
|
JOIN profiles p ON p.couple_id = ma.couple_id
|
|
WHERE m.id = message_deletions.message_id
|
|
AND p.id = auth.uid()
|
|
)
|
|
);
|
|
-- Update messages RLS policy to allow authors to set deleted_at
|
|
CREATE POLICY "Authors can soft delete messages for everyone"
|
|
ON messages FOR UPDATE
|
|
USING (user_id = auth.uid())
|
|
WITH CHECK (user_id = auth.uid());
|
|
-- Add to realtime for live updates
|
|
ALTER PUBLICATION supabase_realtime ADD TABLE message_deletions;
|
|
-- Comments for documentation
|
|
COMMENT ON COLUMN messages.deleted_at IS 'Timestamp when message was deleted for everyone (author-only action). Shows "Message deleted" to all users.';
|
|
COMMENT ON TABLE message_deletions IS 'Per-user message deletions for "delete for self" functionality. Message still visible to other user.';
|