Files
inq-roi-simulador-web/supabase/migrations/017_create_areas.sql
Marcos Benítez de00e3a902
Some checks failed
/ Deploy to Cloudflare Pages (push) Has been cancelled
etapa 3 terminada
2026-07-07 20:19:45 -03:00

60 lines
2.4 KiB
SQL

-- Migración 017: tabla areas + area_id en processes + RLS + bulk-assign org
-- Completamente aditiva — no elimina columnas, tablas ni políticas existentes.
-- ── Paso 1: Crear tabla areas ─────────────────────────────────────────────────
-- Nueva tabla areas: reemplazará process_groups como agrupador normalizado por org
CREATE TABLE IF NOT EXISTS public.areas (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
org_id uuid NOT NULL REFERENCES public.organizations(id) ON DELETE CASCADE,
name text NOT NULL,
description text,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
);
ALTER TABLE public.areas ENABLE ROW LEVEL SECURITY;
-- ── Paso 2: Agregar area_id a processes ───────────────────────────────────────
-- area_id reemplazará group_id como agrupador normalizado dentro de una org.
-- Nullable: procesos sin área asignada son válidos ("Sin área").
ALTER TABLE public.processes
ADD COLUMN IF NOT EXISTS area_id uuid REFERENCES public.areas(id) ON DELETE SET NULL;
-- ── Paso 3: RLS para areas ────────────────────────────────────────────────────
-- SELECT: InQuality ve todas las áreas; cliente ve solo las de su org
CREATE POLICY "areas_select" ON public.areas
FOR SELECT USING (
public.is_inquality()
OR org_id = public.current_org()
);
-- INSERT / UPDATE / DELETE: solo platform_admin
CREATE POLICY "areas_insert" ON public.areas
FOR INSERT WITH CHECK (
public.current_platform_role() = 'platform_admin'
);
CREATE POLICY "areas_update" ON public.areas
FOR UPDATE USING (
public.current_platform_role() = 'platform_admin'
);
CREATE POLICY "areas_delete" ON public.areas
FOR DELETE USING (
public.current_platform_role() = 'platform_admin'
);
-- ── Paso 4: Migración de datos — asignar procesos sin org a InQuality ─────────
-- Procesos sin org_id son datos de prueba de InQuality.
-- Asignarlos a la org de InQuality (is_provider = true) para limpiar los NULLs.
UPDATE public.processes
SET org_id = (
SELECT id FROM public.organizations WHERE is_provider = true LIMIT 1
)
WHERE org_id IS NULL;