Files
tracksteel_app/supabase/migrations/20250719134857-6eb4fe31-da08-4d99-94ee-debce95084b2.sql

45 lines
1.7 KiB
PL/PgSQL

-- Update the function to be more permissive and only check truly critical dependencies
CREATE OR REPLACE FUNCTION public.can_delete_user(_user_id uuid)
RETURNS boolean
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
has_critical_dependencies boolean := false;
BEGIN
-- Only check for truly critical data that would break system integrity
SELECT EXISTS (
-- Check ficha_tecnica_contratos (critical business data)
SELECT 1 FROM public.ficha_tecnica_contratos WHERE user_id = _user_id
UNION ALL
-- Check ordens_fabricacao (critical business data)
SELECT 1 FROM public.ordens_fabricacao WHERE user_id = _user_id
UNION ALL
-- Check tasks that are assigned to user (but not created by - creation is less critical)
SELECT 1 FROM public.tasks WHERE assigned_to = _user_id
UNION ALL
-- Check pecas (critical manufacturing data)
SELECT 1 FROM public.pecas WHERE user_id = _user_id
UNION ALL
-- Check apontamentos_producao (critical production data)
SELECT 1 FROM public.apontamentos_producao WHERE created_by = _user_id
UNION ALL
-- Check cronogramas_of where user is gestor (critical role)
SELECT 1 FROM public.cronogramas_of WHERE gestor_id = _user_id
UNION ALL
-- Check diarios_producao (critical production records)
SELECT 1 FROM public.diarios_producao WHERE created_by = _user_id
UNION ALL
-- Check contratos_obra (critical business data)
SELECT 1 FROM public.contratos_obra WHERE created_by = _user_id
UNION ALL
-- Check diario_obra_rdo (critical work records)
SELECT 1 FROM public.diario_obra_rdo WHERE usuario_rdo = _user_id
) INTO has_critical_dependencies;
-- User can be deleted if they don't have critical dependencies
RETURN NOT has_critical_dependencies;
END;
$$;