mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Add streaks, scheduled releases, and notification settings
- Couple streaks with milestone notifications - Scheduled pack releases with admin UI - Notification preferences screen - Refactored profile settings screens - Partner activity notifications
This commit is contained in:
1 parent
12f312421b
commit
494ed17fe2
82 files changed
+4189
-725
No files matched your search
@@ -0,0 +1,74 @@
|
||||
-- Add notification preferences table
|
||||
-- Allows users to opt out of specific notification types (opt-out model, all enabled by default)
|
||||
|
||||
CREATE TABLE notification_preferences (
|
||||
user_id UUID PRIMARY KEY REFERENCES profiles(id) ON DELETE CASCADE,
|
||||
-- Core notifications (matching + messaging)
|
||||
matches_enabled BOOLEAN DEFAULT true,
|
||||
messages_enabled BOOLEAN DEFAULT true,
|
||||
-- Re-engagement notifications
|
||||
partner_activity_enabled BOOLEAN DEFAULT true,
|
||||
pack_changes_enabled BOOLEAN DEFAULT true,
|
||||
new_packs_enabled BOOLEAN DEFAULT true,
|
||||
streak_milestones_enabled BOOLEAN DEFAULT true,
|
||||
-- Timestamps
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- Enable RLS
|
||||
ALTER TABLE notification_preferences ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- RLS policies: users can only manage their own preferences
|
||||
CREATE POLICY "Users can view their own notification preferences"
|
||||
ON notification_preferences FOR SELECT
|
||||
USING (user_id = auth.uid());
|
||||
|
||||
CREATE POLICY "Users can insert their own notification preferences"
|
||||
ON notification_preferences FOR INSERT
|
||||
WITH CHECK (user_id = auth.uid());
|
||||
|
||||
CREATE POLICY "Users can update their own notification preferences"
|
||||
ON notification_preferences FOR UPDATE
|
||||
USING (user_id = auth.uid())
|
||||
WITH CHECK (user_id = auth.uid());
|
||||
|
||||
-- Super admins can view all preferences
|
||||
CREATE POLICY "Super admins can view all notification preferences"
|
||||
ON notification_preferences FOR SELECT
|
||||
USING (is_super_admin());
|
||||
|
||||
-- Updated_at trigger
|
||||
CREATE TRIGGER update_notification_preferences_updated_at
|
||||
BEFORE UPDATE ON notification_preferences
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
||||
|
||||
-- Function to get notification preferences with defaults
|
||||
-- Returns preferences if they exist, or creates a default row
|
||||
CREATE OR REPLACE FUNCTION get_or_create_notification_preferences(p_user_id UUID)
|
||||
RETURNS notification_preferences
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path = 'public'
|
||||
AS $$
|
||||
DECLARE
|
||||
v_prefs notification_preferences;
|
||||
BEGIN
|
||||
-- Try to get existing preferences
|
||||
SELECT * INTO v_prefs
|
||||
FROM notification_preferences
|
||||
WHERE user_id = p_user_id;
|
||||
|
||||
-- If not found, create default preferences
|
||||
IF NOT FOUND THEN
|
||||
INSERT INTO notification_preferences (user_id)
|
||||
VALUES (p_user_id)
|
||||
RETURNING * INTO v_prefs;
|
||||
END IF;
|
||||
|
||||
RETURN v_prefs;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- Grant execute permission to authenticated users
|
||||
GRANT EXECUTE ON FUNCTION get_or_create_notification_preferences(UUID) TO authenticated;
|
||||
Reference in new issue
Block a user