-- Update auto_create_entity_version to log suspicious versions without user attribution CREATE OR REPLACE FUNCTION public.auto_create_entity_version() RETURNS TRIGGER LANGUAGE plpgsql SECURITY DEFINER SET search_path = public AS $$ 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); -- Create version (only if we have a user context) 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 ); ELSE -- Log suspicious version without user (audit trail) INSERT INTO public.admin_audit_log ( action, details, created_at ) VALUES ( 'version_without_user', jsonb_build_object( 'entity_type', v_entity_type, 'entity_id', NEW.id, 'table', TG_TABLE_NAME, 'operation', TG_OP, 'timestamp', NOW() ), NOW() ); END IF; RETURN NEW; END; $$;