This commit is contained in:
59
supabase/migrations/017_create_areas.sql
Normal file
59
supabase/migrations/017_create_areas.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user