Skip to content

02_modulo.sql

Objetivo

Crear (o asegurar la existencia de) un MÓDULO dentro de una aplicación lógica (campus o gestion).

Este script:

  • CREA el módulo en apps_modulos.
  • NO crea acciones.
  • NO asigna el módulo a roles.

Un módulo representa:

  • Una sección del menú.
  • Un bloque funcional del sistema.
  • Una unidad visible para el usuario.

Concepto clave

Un módulo NO es visible para nadie hasta que:

  • Se asigne explícitamente a uno o más roles (roles_modulos).

Crear el módulo no implica que alguien pueda verlo.


Idempotencia

  • Si ya existe un módulo con el mismo (app_id + nombre), no se duplica.
  • Puede ejecutarse múltiples veces sin efectos adversos.

Script completo

sql
-- ============================================================
-- 02_modulo.sql
-- ============================================================
-- OBJETIVO
-- --------
-- Crear (o asegurar la existencia de) un MÓDULO dentro de una
-- aplicación lógica ('campus' o 'gestion').
--
-- Este script:
-- - CREA el módulo en apps_modulos
-- - NO crea acciones
-- - NO asigna el módulo a roles
--
-- El módulo representa una SECCIÓN del sistema y es lo que
-- aparece como item principal en el menú lateral.
--
-- IDempotencia:
-- -------------
-- - Si ya existe un módulo con el mismo (app_id + nombre),
--   no se duplica.
-- ============================================================

WITH
-- ============================================================
-- PARAMETROS DEL MODULO (EDITAR SOLO ACA)
-- ============================================================
params AS (
  SELECT
    'gestion'::text AS p_app_id,  -- 'gestion' o 'campus'
    'Tramos PP'::text AS p_modulo_nombre,
    'Gestión de tramos de Planta Permanente'::text
      AS p_modulo_descripcion
),

-- ============================================================
-- CREAR / ASEGURAR MODULO
-- ============================================================
insert_modulo AS (
  INSERT INTO public.apps_modulos (id, app_id, nombre, descripcion)
  SELECT
    gen_random_uuid(),
    p.p_app_id,
    p.p_modulo_nombre,
    p.p_modulo_descripcion
  FROM params p
  WHERE NOT EXISTS (
    SELECT 1
    FROM public.apps_modulos m
    WHERE m.app_id = p.p_app_id
      AND m.nombre = p.p_modulo_nombre
  )
  RETURNING id, app_id, nombre
)

-- ============================================================
-- SALIDA DE CONTROL / AUDITORIA
-- ============================================================
SELECT
  m.id,
  m.app_id,
  m.nombre,
  m.descripcion
FROM public.apps_modulos m
JOIN params p
  ON m.app_id = p.p_app_id
 AND m.nombre = p.p_modulo_nombre;