mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:11:11 -05:00
Fix ride versioning synchronization
This commit is contained in:
@@ -2587,6 +2587,44 @@ export type Database = {
|
||||
},
|
||||
]
|
||||
}
|
||||
ride_former_names: {
|
||||
Row: {
|
||||
created_at: string | null
|
||||
id: string
|
||||
name: string
|
||||
ride_id: string
|
||||
updated_at: string | null
|
||||
used_from: string | null
|
||||
used_until: string | null
|
||||
}
|
||||
Insert: {
|
||||
created_at?: string | null
|
||||
id?: string
|
||||
name: string
|
||||
ride_id: string
|
||||
updated_at?: string | null
|
||||
used_from?: string | null
|
||||
used_until?: string | null
|
||||
}
|
||||
Update: {
|
||||
created_at?: string | null
|
||||
id?: string
|
||||
name?: string
|
||||
ride_id?: string
|
||||
updated_at?: string | null
|
||||
used_from?: string | null
|
||||
used_until?: string | null
|
||||
}
|
||||
Relationships: [
|
||||
{
|
||||
foreignKeyName: "ride_former_names_ride_id_fkey"
|
||||
columns: ["ride_id"]
|
||||
isOneToOne: false
|
||||
referencedRelation: "rides"
|
||||
referencedColumns: ["id"]
|
||||
},
|
||||
]
|
||||
}
|
||||
ride_kiddie_details: {
|
||||
Row: {
|
||||
character_theme: string | null
|
||||
@@ -3280,6 +3318,7 @@ export type Database = {
|
||||
}
|
||||
ride_versions: {
|
||||
Row: {
|
||||
age_requirement: number | null
|
||||
angle_degrees: number | null
|
||||
animatronics_count: number | null
|
||||
arm_length_meters: number | null
|
||||
@@ -3295,6 +3334,7 @@ export type Database = {
|
||||
character_theme: string | null
|
||||
closing_date: string | null
|
||||
closing_date_precision: string | null
|
||||
coaster_type: string | null
|
||||
created_at: string
|
||||
created_by: string | null
|
||||
description: string | null
|
||||
@@ -3303,10 +3343,11 @@ export type Database = {
|
||||
duration_seconds: number | null
|
||||
educational_theme: string | null
|
||||
flume_type: string | null
|
||||
former_names: Json | null
|
||||
gforce_max: number | null
|
||||
height_meters: number | null
|
||||
height_requirement_cm: number | null
|
||||
image_url: string | null
|
||||
intensity_level: string | null
|
||||
inversions_count: number | null
|
||||
is_current: boolean
|
||||
length_meters: number | null
|
||||
@@ -3325,12 +3366,14 @@ export type Database = {
|
||||
propulsion_method: string[] | null
|
||||
ride_id: string
|
||||
ride_model_id: string | null
|
||||
ride_sub_type: string | null
|
||||
ride_system: string | null
|
||||
rotation_speed_rpm: number | null
|
||||
rotation_type: string | null
|
||||
round_trip_duration_seconds: number | null
|
||||
route_length_meters: number | null
|
||||
scenes_count: number | null
|
||||
seating_type: string | null
|
||||
show_duration_seconds: number | null
|
||||
slug: string
|
||||
splash_height_meters: number | null
|
||||
@@ -3351,6 +3394,7 @@ export type Database = {
|
||||
wetness_level: string | null
|
||||
}
|
||||
Insert: {
|
||||
age_requirement?: number | null
|
||||
angle_degrees?: number | null
|
||||
animatronics_count?: number | null
|
||||
arm_length_meters?: number | null
|
||||
@@ -3366,6 +3410,7 @@ export type Database = {
|
||||
character_theme?: string | null
|
||||
closing_date?: string | null
|
||||
closing_date_precision?: string | null
|
||||
coaster_type?: string | null
|
||||
created_at?: string
|
||||
created_by?: string | null
|
||||
description?: string | null
|
||||
@@ -3374,10 +3419,11 @@ export type Database = {
|
||||
duration_seconds?: number | null
|
||||
educational_theme?: string | null
|
||||
flume_type?: string | null
|
||||
former_names?: Json | null
|
||||
gforce_max?: number | null
|
||||
height_meters?: number | null
|
||||
height_requirement_cm?: number | null
|
||||
image_url?: string | null
|
||||
intensity_level?: string | null
|
||||
inversions_count?: number | null
|
||||
is_current?: boolean
|
||||
length_meters?: number | null
|
||||
@@ -3396,12 +3442,14 @@ export type Database = {
|
||||
propulsion_method?: string[] | null
|
||||
ride_id: string
|
||||
ride_model_id?: string | null
|
||||
ride_sub_type?: string | null
|
||||
ride_system?: string | null
|
||||
rotation_speed_rpm?: number | null
|
||||
rotation_type?: string | null
|
||||
round_trip_duration_seconds?: number | null
|
||||
route_length_meters?: number | null
|
||||
scenes_count?: number | null
|
||||
seating_type?: string | null
|
||||
show_duration_seconds?: number | null
|
||||
slug: string
|
||||
splash_height_meters?: number | null
|
||||
@@ -3422,6 +3470,7 @@ export type Database = {
|
||||
wetness_level?: string | null
|
||||
}
|
||||
Update: {
|
||||
age_requirement?: number | null
|
||||
angle_degrees?: number | null
|
||||
animatronics_count?: number | null
|
||||
arm_length_meters?: number | null
|
||||
@@ -3437,6 +3486,7 @@ export type Database = {
|
||||
character_theme?: string | null
|
||||
closing_date?: string | null
|
||||
closing_date_precision?: string | null
|
||||
coaster_type?: string | null
|
||||
created_at?: string
|
||||
created_by?: string | null
|
||||
description?: string | null
|
||||
@@ -3445,10 +3495,11 @@ export type Database = {
|
||||
duration_seconds?: number | null
|
||||
educational_theme?: string | null
|
||||
flume_type?: string | null
|
||||
former_names?: Json | null
|
||||
gforce_max?: number | null
|
||||
height_meters?: number | null
|
||||
height_requirement_cm?: number | null
|
||||
image_url?: string | null
|
||||
intensity_level?: string | null
|
||||
inversions_count?: number | null
|
||||
is_current?: boolean
|
||||
length_meters?: number | null
|
||||
@@ -3467,12 +3518,14 @@ export type Database = {
|
||||
propulsion_method?: string[] | null
|
||||
ride_id?: string
|
||||
ride_model_id?: string | null
|
||||
ride_sub_type?: string | null
|
||||
ride_system?: string | null
|
||||
rotation_speed_rpm?: number | null
|
||||
rotation_type?: string | null
|
||||
round_trip_duration_seconds?: number | null
|
||||
route_length_meters?: number | null
|
||||
scenes_count?: number | null
|
||||
seating_type?: string | null
|
||||
show_duration_seconds?: number | null
|
||||
slug?: string
|
||||
splash_height_meters?: number | null
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
-- ============================================================================
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user