mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:51:12 -05:00
155 lines
6.1 KiB
SQL
155 lines
6.1 KiB
SQL
-- Create category-specific detail tables for rides
|
|
|
|
-- Water Ride Details Table
|
|
CREATE TABLE IF NOT EXISTS public.ride_water_details (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
|
|
water_depth_cm DECIMAL(10,2),
|
|
splash_height_meters DECIMAL(10,2),
|
|
wetness_level TEXT CHECK (wetness_level IN ('dry', 'light', 'moderate', 'soaked')),
|
|
flume_type TEXT,
|
|
boat_capacity INTEGER,
|
|
water_volume_liters DECIMAL(15,2),
|
|
pump_capacity_lph DECIMAL(15,2),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(ride_id)
|
|
);
|
|
|
|
-- Dark Ride Details Table
|
|
CREATE TABLE IF NOT EXISTS public.ride_dark_details (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
|
|
theme_name TEXT,
|
|
story_description TEXT,
|
|
show_duration_seconds INTEGER,
|
|
effects_type TEXT[],
|
|
animatronics_count INTEGER,
|
|
projection_type TEXT,
|
|
ride_system TEXT,
|
|
scenes_count INTEGER,
|
|
interactive BOOLEAN DEFAULT false,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(ride_id)
|
|
);
|
|
|
|
-- Flat Ride Details Table
|
|
CREATE TABLE IF NOT EXISTS public.ride_flat_details (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
|
|
rotation_type TEXT CHECK (rotation_type IN ('horizontal', 'vertical', 'multi_axis', 'pendulum', 'none')),
|
|
motion_pattern TEXT,
|
|
platform_count INTEGER,
|
|
swing_angle_degrees DECIMAL(10,2),
|
|
rotation_speed_rpm DECIMAL(10,2),
|
|
arm_length_meters DECIMAL(10,2),
|
|
max_height_reached_meters DECIMAL(10,2),
|
|
spinning BOOLEAN DEFAULT false,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(ride_id)
|
|
);
|
|
|
|
-- Kiddie Ride Details Table
|
|
CREATE TABLE IF NOT EXISTS public.ride_kiddie_details (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
|
|
min_age INTEGER,
|
|
max_age INTEGER,
|
|
parent_supervision_required BOOLEAN DEFAULT false,
|
|
educational_theme TEXT,
|
|
character_theme TEXT,
|
|
gentle_mode BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(ride_id)
|
|
);
|
|
|
|
-- Transportation Ride Details Table
|
|
CREATE TABLE IF NOT EXISTS public.ride_transportation_details (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
ride_id UUID NOT NULL REFERENCES public.rides(id) ON DELETE CASCADE,
|
|
transport_type TEXT CHECK (transport_type IN ('train', 'monorail', 'skylift', 'ferry', 'peoplemover', 'cable_car')),
|
|
route_length_meters DECIMAL(10,2),
|
|
stations_count INTEGER,
|
|
vehicle_capacity INTEGER,
|
|
vehicles_count INTEGER,
|
|
round_trip_duration_seconds INTEGER,
|
|
accessibility_features TEXT[],
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(ride_id)
|
|
);
|
|
|
|
-- Create indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_ride_water_details_ride_id ON public.ride_water_details(ride_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ride_dark_details_ride_id ON public.ride_dark_details(ride_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ride_flat_details_ride_id ON public.ride_flat_details(ride_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ride_kiddie_details_ride_id ON public.ride_kiddie_details(ride_id);
|
|
CREATE INDEX IF NOT EXISTS idx_ride_transportation_details_ride_id ON public.ride_transportation_details(ride_id);
|
|
|
|
-- Enable RLS
|
|
ALTER TABLE public.ride_water_details ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE public.ride_dark_details ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE public.ride_flat_details ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE public.ride_kiddie_details ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE public.ride_transportation_details ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- RLS Policies (read-only for all, write for authenticated)
|
|
CREATE POLICY "Water ride details are viewable by everyone"
|
|
ON public.ride_water_details FOR SELECT USING (true);
|
|
|
|
CREATE POLICY "Dark ride details are viewable by everyone"
|
|
ON public.ride_dark_details FOR SELECT USING (true);
|
|
|
|
CREATE POLICY "Flat ride details are viewable by everyone"
|
|
ON public.ride_flat_details FOR SELECT USING (true);
|
|
|
|
CREATE POLICY "Kiddie ride details are viewable by everyone"
|
|
ON public.ride_kiddie_details FOR SELECT USING (true);
|
|
|
|
CREATE POLICY "Transportation ride details are viewable by everyone"
|
|
ON public.ride_transportation_details FOR SELECT USING (true);
|
|
|
|
-- Write policies (moderators only)
|
|
CREATE POLICY "Moderators can manage water ride details"
|
|
ON public.ride_water_details FOR ALL
|
|
USING (public.is_moderator(auth.uid()));
|
|
|
|
CREATE POLICY "Moderators can manage dark ride details"
|
|
ON public.ride_dark_details FOR ALL
|
|
USING (public.is_moderator(auth.uid()));
|
|
|
|
CREATE POLICY "Moderators can manage flat ride details"
|
|
ON public.ride_flat_details FOR ALL
|
|
USING (public.is_moderator(auth.uid()));
|
|
|
|
CREATE POLICY "Moderators can manage kiddie ride details"
|
|
ON public.ride_kiddie_details FOR ALL
|
|
USING (public.is_moderator(auth.uid()));
|
|
|
|
CREATE POLICY "Moderators can manage transportation ride details"
|
|
ON public.ride_transportation_details FOR ALL
|
|
USING (public.is_moderator(auth.uid()));
|
|
|
|
-- Add update triggers
|
|
CREATE TRIGGER update_ride_water_details_updated_at
|
|
BEFORE UPDATE ON public.ride_water_details
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_ride_dark_details_updated_at
|
|
BEFORE UPDATE ON public.ride_dark_details
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_ride_flat_details_updated_at
|
|
BEFORE UPDATE ON public.ride_flat_details
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_ride_kiddie_details_updated_at
|
|
BEFORE UPDATE ON public.ride_kiddie_details
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_ride_transportation_details_updated_at
|
|
BEFORE UPDATE ON public.ride_transportation_details
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column(); |