mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-26 08:31:08 -05:00
feat: Add category-specific ride fields
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
-- 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();
|
||||
Reference in New Issue
Block a user