Files
Sauci/apps/supabase/migrations/20260108000000_add_intensity_levels.sql
jjbrunton 494ed17fe2 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
2026-01-17 16:38:47 +00:00

82 lines
2.3 KiB
PL/PgSQL

-- Add intensity levels for content balance
ALTER TABLE profiles
ADD COLUMN IF NOT EXISTS max_intensity INTEGER DEFAULT 2
CHECK (max_intensity >= 1 AND max_intensity <= 5);
UPDATE profiles
SET max_intensity = CASE
WHEN show_explicit_content IS TRUE THEN 5
ELSE 2
END
WHERE max_intensity IS NULL;
ALTER TABLE question_packs
ADD COLUMN IF NOT EXISTS min_intensity INTEGER,
ADD COLUMN IF NOT EXISTS max_intensity INTEGER,
ADD COLUMN IF NOT EXISTS avg_intensity NUMERIC(3,2);
CREATE OR REPLACE FUNCTION update_question_pack_intensity_stats(target_pack_id UUID)
RETURNS void
LANGUAGE plpgsql
SET search_path = 'public'
AS $$
BEGIN
UPDATE question_packs qp
SET min_intensity = stats.min_intensity,
max_intensity = stats.max_intensity,
avg_intensity = stats.avg_intensity
FROM (
SELECT pack_id,
MIN(intensity) AS min_intensity,
MAX(intensity) AS max_intensity,
ROUND(AVG(intensity)::numeric, 2) AS avg_intensity
FROM questions
WHERE pack_id = target_pack_id
GROUP BY pack_id
) stats
WHERE qp.id = stats.pack_id;
IF NOT FOUND THEN
UPDATE question_packs
SET min_intensity = NULL,
max_intensity = NULL,
avg_intensity = NULL
WHERE id = target_pack_id;
END IF;
END;
$$;
CREATE OR REPLACE FUNCTION handle_question_intensity_change()
RETURNS TRIGGER
LANGUAGE plpgsql
SET search_path = 'public'
AS $$
BEGIN
IF TG_OP = 'DELETE' THEN
PERFORM update_question_pack_intensity_stats(OLD.pack_id);
RETURN OLD;
END IF;
IF TG_OP = 'UPDATE' AND NEW.pack_id IS DISTINCT FROM OLD.pack_id THEN
PERFORM update_question_pack_intensity_stats(OLD.pack_id);
END IF;
PERFORM update_question_pack_intensity_stats(NEW.pack_id);
RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS question_pack_intensity_stats ON questions;
CREATE TRIGGER question_pack_intensity_stats
AFTER INSERT OR UPDATE OR DELETE ON questions
FOR EACH ROW EXECUTE FUNCTION handle_question_intensity_change();
UPDATE question_packs qp
SET min_intensity = stats.min_intensity,
max_intensity = stats.max_intensity,
avg_intensity = stats.avg_intensity
FROM (
SELECT pack_id,
MIN(intensity) AS min_intensity,
MAX(intensity) AS max_intensity,
ROUND(AVG(intensity)::numeric, 2) AS avg_intensity
FROM questions
GROUP BY pack_id
) stats
WHERE qp.id = stats.pack_id;