Buscar en la documentación

dashboard_widgets y user_dashboard_widgets

Catálogo de widgets del dashboard y diseño guardado de cada persona.

3 min de lecturaVer en GitHub

Catálogo de widgets. Una fila por widget que el sistema sabe calcular.

ColumnaTipoRestriccionesDescripción
idSMALLINT UNSIGNEDPKClave interna
codeVARCHAR(40)UNIQUE, NOT NULLClave natural estable (incidents_by_status); la usan la API y el código
nameVARCHAR(60)NOT NULLTítulo que ve la persona
descriptionVARCHAR(200)NOT NULLExplicación del ícono de información
kindVARCHAR(10)NOT NULL, CHECK kpi, chart o listCómo se dibuja
permission_idSMALLINT UNSIGNEDFK → permissions, RESTRICT, NULLPermiso que exige; vacío = lo ve todo el que entra al dashboard
sort_orderSMALLINT UNSIGNEDNOT NULLOrden en el diseño original, de diez en diez para poder intercalar
min_w, max_wTINYINT UNSIGNEDNOT NULL, CHECKAncho mínimo y máximo en columnas (de 1 a 12)
min_h, max_hTINYINT UNSIGNEDNOT NULL, CHECKAlto mínimo y máximo en filas
default_w, default_hTINYINT UNSIGNEDNOT NULL, CHECKTamaño en el diseño original, dentro de los topes
is_activeBOOLEANNOT NULL, por defecto 1Un widget retirado deja de ofrecerse sin borrar el diseño de nadie
in_default_layoutBOOLEANNOT NULL, por defecto 1Forma parte del diseño original. Los demás se ofrecen en “Agregar widget” y aparecen ocultos (ADR-0081)
created_at, updated_atTIMESTAMP

Las restricciones CHECK garantizan topes coherentes: 1 ≤ min_w ≤ default_w ≤ max_w ≤ 12 y 1 ≤ min_h ≤ default_h ≤ max_h.

Índices: code (único), permission_id (FK) y (is_active, sort_order) para leer el catálogo en orden.

user_dashboard_widgets

Diseño de cada persona. Sin filas, la persona ve el diseño original.

ColumnaTipoRestriccionesDescripción
user_idBIGINT UNSIGNEDPK, FK → users, CASCADEEl diseño es una preferencia: se va con la persona
dashboard_widget_idSMALLINT UNSIGNEDPK, FK → dashboard_widgets, CASCADEY con el widget
xTINYINT UNSIGNEDNOT NULLColumna de inicio (0 a 11)
ySMALLINT UNSIGNEDNOT NULLFila de inicio
w, hTINYINT UNSIGNEDNOT NULLAncho y alto
is_visibleBOOLEANNOT NULLOculto conserva su lugar, para volver a donde estaba
created_at, updated_atTIMESTAMP

CHECK w ≥ 1, h ≥ 1 y x + w ≤ 12: un widget nunca se sale de la grilla, aunque alguien escriba directo en la base. Los choques entre widgets y los topes de cada uno los valida el dominio.

Índices: la clave primaria (user_id, dashboard_widget_id) y dashboard_widget_id (FK).

Dónde está en el código