diff --git a/supabase/migrations/20251010185335_6f7993ee-77ac-4352-b905-7d1acb78b0ce.sql b/supabase/migrations/20251010185335_6f7993ee-77ac-4352-b905-7d1acb78b0ce.sql new file mode 100644 index 00000000..8f1a49db --- /dev/null +++ b/supabase/migrations/20251010185335_6f7993ee-77ac-4352-b905-7d1acb78b0ce.sql @@ -0,0 +1,61 @@ +-- Fix auto_create_entity_version function to handle system updates without user context +CREATE OR REPLACE FUNCTION public.auto_create_entity_version() + RETURNS trigger + LANGUAGE plpgsql + SECURITY DEFINER + SET search_path TO 'public' +AS $function$ +DECLARE + v_entity_type TEXT; + v_change_type version_change_type; + v_user_id UUID; + v_version_data JSONB; +BEGIN + -- Determine entity type from table name + v_entity_type := CASE TG_TABLE_NAME + WHEN 'parks' THEN 'park' + WHEN 'rides' THEN 'ride' + WHEN 'companies' THEN 'company' + WHEN 'ride_models' THEN 'ride_model' + WHEN 'photos' THEN 'photo' + ELSE substring(TG_TABLE_NAME from 1 for length(TG_TABLE_NAME) - 1) + END; + + -- Determine change type + v_change_type := CASE TG_OP + WHEN 'INSERT' THEN 'created'::version_change_type + WHEN 'UPDATE' THEN 'updated'::version_change_type + ELSE 'updated'::version_change_type + END; + + -- Get user from session or auth context + BEGIN + v_user_id := current_setting('app.current_user_id', true)::UUID; + EXCEPTION WHEN OTHERS THEN + v_user_id := auth.uid(); + END; + + -- Convert NEW record to JSONB + v_version_data := to_jsonb(NEW); + + -- Only create version if we have a user context + -- Skip versioning for system migrations/updates + IF v_user_id IS NOT NULL THEN + PERFORM public.create_entity_version( + v_entity_type, + NEW.id, + v_version_data, + v_user_id, + CASE TG_OP + WHEN 'INSERT' THEN 'Entity created' + WHEN 'UPDATE' THEN 'Entity updated' + ELSE 'Entity modified' + END, + NULL, + v_change_type + ); + END IF; + + RETURN NEW; +END; +$function$; \ No newline at end of file