diff --git a/src/integrations/supabase/types.ts b/src/integrations/supabase/types.ts index 11db25ab..961f0351 100644 --- a/src/integrations/supabase/types.ts +++ b/src/integrations/supabase/types.ts @@ -5616,17 +5616,18 @@ export type Database = { Args: { p_submission_id: string } Returns: { action_type: string - approved_by: string + approved_entity_id: string company_submission_id: string created_at: string depends_on: string entity_data: Json id: string + is_test_data: boolean item_type: string order_index: number park_submission_id: string photo_submission_id: string - rejected_by: string + rejection_reason: string ride_model_submission_id: string ride_submission_id: string status: string diff --git a/supabase/migrations/20251104171345_2bde950c-a864-4818-9cc7-c7af32ffb04d.sql b/supabase/migrations/20251104171345_2bde950c-a864-4818-9cc7-c7af32ffb04d.sql new file mode 100644 index 00000000..b940e190 --- /dev/null +++ b/supabase/migrations/20251104171345_2bde950c-a864-4818-9cc7-c7af32ffb04d.sql @@ -0,0 +1,76 @@ +-- Fix get_submission_items_with_entities to use correct column names +-- The submission_items table has approved_entity_id and rejection_reason, not approved_by/rejected_by + +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_entity_id uuid, + rejection_reason text, + is_test_data boolean, + 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_entity_id, + si.rejection_reason, + si.is_test_data, + 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.'; + +GRANT EXECUTE ON FUNCTION get_submission_items_with_entities(uuid) TO authenticated; \ No newline at end of file