mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-11-01 18:19:43 +00:00
Add intensity-based preferences and harden E2EE payload verification
This commit is contained in:
1 parent
e23f4557bb
commit
0a919f06fc
20 files changed
+2033
-251
No files matched your search
@@ -0,0 +1,88 @@
|
||||
-- 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;
|
||||
Reference in new issue
Block a user