Files
thrilltrack-explorer/supabase/migrations/20251030135057_99cd2c66-260f-4913-a5b4-0a1e9328494e.sql
2025-10-30 13:51:33 +00:00

66 lines
3.0 KiB
SQL

-- ============================================================================
-- COMPREHENSIVE VERSIONING FIX: Add missing fields to ride_versions
-- ============================================================================
-- Add missing columns from rides table to ride_versions
ALTER TABLE public.ride_versions
ADD COLUMN IF NOT EXISTS ride_sub_type TEXT,
ADD COLUMN IF NOT EXISTS age_requirement INTEGER,
ADD COLUMN IF NOT EXISTS coaster_type TEXT,
ADD COLUMN IF NOT EXISTS seating_type TEXT,
ADD COLUMN IF NOT EXISTS intensity_level TEXT,
ADD COLUMN IF NOT EXISTS image_url TEXT;
-- Add comments for new columns
COMMENT ON COLUMN public.ride_versions.ride_sub_type IS 'Subtype classification within the main category';
COMMENT ON COLUMN public.ride_versions.age_requirement IS 'Minimum age requirement in years';
COMMENT ON COLUMN public.ride_versions.coaster_type IS 'Type of roller coaster (e.g., wooden, steel, hybrid)';
COMMENT ON COLUMN public.ride_versions.seating_type IS 'Type of seating configuration';
COMMENT ON COLUMN public.ride_versions.intensity_level IS 'Intensity level rating (e.g., mild, moderate, extreme)';
COMMENT ON COLUMN public.ride_versions.image_url IS 'Primary image URL for the ride';
-- ============================================================================
-- Create ride_former_names relational table (replacing JSONB)
-- ============================================================================
CREATE TABLE IF NOT EXISTS public.ride_former_names (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
name TEXT NOT NULL,
used_from DATE,
used_until DATE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
-- Add indexes for performance
CREATE INDEX IF NOT EXISTS idx_ride_former_names_ride_id ON public.ride_former_names(ride_id);
CREATE INDEX IF NOT EXISTS idx_ride_former_names_dates ON public.ride_former_names(used_from, used_until);
-- Enable RLS
ALTER TABLE public.ride_former_names ENABLE ROW LEVEL SECURITY;
-- Create RLS policies
CREATE POLICY "Public can view former names"
ON public.ride_former_names
FOR SELECT
USING (true);
CREATE POLICY "Moderators can manage former names"
ON public.ride_former_names
FOR ALL
USING (is_moderator(auth.uid()) AND has_aal2());
-- Add comments
COMMENT ON TABLE public.ride_former_names IS 'Historical names for rides - relational replacement for JSONB former_names';
COMMENT ON COLUMN public.ride_former_names.name IS 'Former name of the ride';
COMMENT ON COLUMN public.ride_former_names.used_from IS 'Date when this name started being used';
COMMENT ON COLUMN public.ride_former_names.used_until IS 'Date when this name stopped being used';
-- ============================================================================
-- Remove former_names JSONB column from ride_versions (violates no-JSONB rule)
-- ============================================================================
ALTER TABLE public.ride_versions DROP COLUMN IF EXISTS former_names;