Appearance
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;