diff --git a/supabase/migrations/20251104165825_423c736a-829a-4950-ae54-890eb0eb64ef.sql b/supabase/migrations/20251104165825_423c736a-829a-4950-ae54-890eb0eb64ef.sql new file mode 100644 index 00000000..266a7f61 --- /dev/null +++ b/supabase/migrations/20251104165825_423c736a-829a-4950-ae54-890eb0eb64ef.sql @@ -0,0 +1,75 @@ +-- Fix search_path for get_submission_items_with_entities function +-- The linter prefers search_path TO 'schema' syntax + +DROP FUNCTION IF EXISTS get_submission_items_with_entities(uuid); + +CREATE OR REPLACE FUNCTION get_submission_items_with_entities(p_submission_id uuid) +RETURNS TABLE ( + id uuid, + submission_id uuid, + item_type text, + action_type text, + status text, + order_index integer, + depends_on uuid, + park_submission_id uuid, + ride_submission_id uuid, + company_submission_id uuid, + photo_submission_id uuid, + ride_model_submission_id uuid, + timeline_event_submission_id uuid, + approved_by uuid, + rejected_by uuid, + created_at timestamptz, + updated_at timestamptz, + entity_data jsonb +) +SECURITY DEFINER +SET search_path TO 'public' +LANGUAGE plpgsql +AS $$ +BEGIN + RETURN QUERY + SELECT + si.id, + si.submission_id, + si.item_type, + si.action_type, + si.status, + si.order_index, + si.depends_on, + si.park_submission_id, + si.ride_submission_id, + si.company_submission_id, + si.photo_submission_id, + si.ride_model_submission_id, + si.timeline_event_submission_id, + si.approved_by, + si.rejected_by, + si.created_at, + si.updated_at, + -- Join entity data based on item_type + CASE + WHEN si.item_type = 'park' THEN + (SELECT to_jsonb(ps.*) FROM park_submissions ps WHERE ps.id = si.park_submission_id) + WHEN si.item_type = 'ride' THEN + (SELECT to_jsonb(rs.*) FROM ride_submissions rs WHERE rs.id = si.ride_submission_id) + WHEN si.item_type IN ('manufacturer', 'operator', 'designer', 'property_owner') THEN + (SELECT to_jsonb(cs.*) FROM company_submissions cs WHERE cs.id = si.company_submission_id) + WHEN si.item_type IN ('photo', 'photo_edit', 'photo_delete') THEN + (SELECT to_jsonb(phs.*) FROM photo_submissions phs WHERE phs.id = si.photo_submission_id) + WHEN si.item_type = 'ride_model' THEN + (SELECT to_jsonb(rms.*) FROM ride_model_submissions rms WHERE rms.id = si.ride_model_submission_id) + ELSE NULL + END AS entity_data + FROM submission_items si + WHERE si.submission_id = p_submission_id + ORDER BY si.order_index; +END; +$$; + +COMMENT ON FUNCTION get_submission_items_with_entities IS +'Fetch submission items with their entity data in a single query. Uses SECURITY DEFINER to access submission tables with proper RLS context from the parent content_submissions access.'; + +-- Grant execute to authenticated users +GRANT EXECUTE ON FUNCTION get_submission_items_with_entities(uuid) TO authenticated; \ No newline at end of file