mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 04:31:13 -05:00
52 lines
1.8 KiB
SQL
52 lines
1.8 KiB
SQL
-- Phase 1: Add conflict resolution tracking
|
|
CREATE TABLE IF NOT EXISTS public.conflict_resolutions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
submission_id UUID NOT NULL REFERENCES public.content_submissions(id) ON DELETE CASCADE,
|
|
detected_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
resolved_by UUID REFERENCES auth.users(id) ON DELETE SET NULL,
|
|
resolution_strategy TEXT NOT NULL CHECK (resolution_strategy IN ('keep-mine', 'keep-theirs', 'reload', 'merge')),
|
|
conflict_details JSONB,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Add index for performance
|
|
CREATE INDEX IF NOT EXISTS idx_conflict_resolutions_submission
|
|
ON public.conflict_resolutions(submission_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_conflict_resolutions_detected_at
|
|
ON public.conflict_resolutions(detected_at DESC);
|
|
|
|
-- Enable RLS
|
|
ALTER TABLE public.conflict_resolutions ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Policy: Moderators can view all conflict resolutions
|
|
CREATE POLICY "Moderators can view conflict resolutions"
|
|
ON public.conflict_resolutions
|
|
FOR SELECT
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM public.user_roles
|
|
WHERE user_id = auth.uid()
|
|
AND role IN ('moderator', 'admin', 'superuser')
|
|
)
|
|
);
|
|
|
|
-- Policy: Moderators can insert conflict resolutions
|
|
CREATE POLICY "Moderators can insert conflict resolutions"
|
|
ON public.conflict_resolutions
|
|
FOR INSERT
|
|
WITH CHECK (
|
|
EXISTS (
|
|
SELECT 1 FROM public.user_roles
|
|
WHERE user_id = auth.uid()
|
|
AND role IN ('moderator', 'admin', 'superuser')
|
|
)
|
|
AND resolved_by = auth.uid()
|
|
);
|
|
|
|
-- Add index for notification deduplication performance (Phase 3)
|
|
CREATE INDEX IF NOT EXISTS idx_notification_logs_dedup
|
|
ON public.notification_logs(user_id, idempotency_key, created_at);
|
|
|
|
-- Add comment
|
|
COMMENT ON TABLE public.conflict_resolutions IS 'Tracks resolution of concurrent edit conflicts in moderation system'; |