Entidad-Relación: Product HUB¶
Autor: Adalberto González¶
Fecha creación: 2026-08-19
Estado: producción
Colecciones propias del módulo, todas en MongoDB. Productos y Tienda son colecciones core del sistema (no exclusivas de Product HUB), incluidas aquí solo por las relaciones que cruzan hacia ellas.
erDiagram
Tienda ||--o| ProductHubComunidades : "es dueña de (IdTiendaDuena)"
Tienda ||--o{ ProductHubSolicitudesMembresia : "solicita como (IdTiendaSolicitante)"
Tienda ||--o{ ProductHubSolicitudesProducto : "solicita como (IdTiendaSolicitante)"
Tienda ||--o{ ProductHubAutorizaciones : "recibe como (IdTiendaSolicitante)"
ProductHubComunidades ||--o{ ProductHubSolicitudesMembresia : "recibe"
ProductHubComunidades ||--o{ ProductHubSolicitudesProducto : "recibe"
ProductHubComunidades ||--o{ ProductHubAutorizaciones : "otorga"
ProductHubSolicitudesProducto ||--o| ProductHubAutorizaciones : "si se aprueba, genera"
Productos ||--o{ ProductHubSolicitudesProducto : "IdProducto"
Productos ||--o{ ProductHubAutorizaciones : "IdProducto"
ProductHubComunidades {
string _id
string IdTiendaDuena
string IdComunidad "UUID v4"
string NombreComunidad
string_array AdminsComunidad "emails"
string_array MiembrosComunidad "emails"
boolean Estado
}
ProductHubSolicitudesMembresia {
string _id
string IdComunidad
number IdTiendaDuena
number IdTiendaSolicitante
string EmailSolicitante
string Resultado "APROBADO | RECHAZADO | null"
}
ProductHubSolicitudesProducto {
string _id
string IdComunidad
number IdTiendaSolicitante
number IdProducto
string EmailSolicitante
string Resultado "APROBADO | RECHAZADO | null"
}
ProductHubAutorizaciones {
string _id
string IdComunidad
number IdTiendaSolicitante
number IdProducto
boolean Estado "true = vigente. Nunca se borra"
}
Tienda {
number Id
string NombreTienda
string_array TipoTienda "Propia | Dropshipping | Proveedor"
}
Productos {
number idproducto
string perfilproducto "publico | privado"
string IdTienda
}
Notas del modelo¶
IdComunidades un UUID v4, no el_idde Mongo ni un consecutivo — verarquitectura/decisiones.md(ADR-002) ycrearIdComunidad(). Se usa como clave lógica en las 3 colecciones hijas.ProductHubComunidadeses 1:1 con la tienda dueña en la práctica: una tienda solo debería tener una comunidad activa, aunque el esquema no lo restringe a nivel de base de datos.MiembrosComunidadguarda emails de usuario, no ids de tienda. Si dos usuarios distintos comparten la misma tienda asignada, cada uno necesita su propia entrada aprobada — la membresía no se hereda automáticamente entre operadores de la misma tienda.ProductHubAutorizacionesnunca se borra. Solo existe la ruta de creación (Estado:trueal aprobar unaSolicitudProducto); no hay UI para revocar (Estado:false) hoy.- El cruce con
PedidosInterno es una relación de base de datos formal — se resuelve en tiempo de consulta (pipeline de agregación) comparandoProductos.idproductoautorizado contra los 12 campos planosIdStock1..12de cada pedido. Vergestion-comunidad.md→getEstadisticasVentasComunidad.
Historial de cambios¶
| Fecha | Autor | Cambio |
|---|---|---|
| 2026-08-19 | Adalberto González | Creación del diagrama, módulo ya en producción |