Servicio: messages
Información General
- Propósito: Sistema de auditoría y notificaciones de eventos de construcción. Registra todos los eventos que ocurren en los bloques (imágenes, videos, certificaciones, cambios).
- Tecnología: Go / Gin v1.10.0
- Puerto:
:8113 - Módulo:
messages
Propósito de Negocio
Messages actúa como log de auditoría centralizado: - Registra quién hizo qué y cuándo en cada bloque - Permite consultar el historial de eventos por bloque o etiqueta - Clasificar eventos por tipo, importancia y usuario - Base para reportes de compliance y trazabilidad de obra
Importante: Este servicio es un consumidor pasivo. No hace llamadas HTTP a otros servicios. Solo recibe eventos de media, registry y otros.
Endpoints Expuestos
| Path | Descripción |
|---|---|
POST / | Crear nuevo mensaje/evento en un bloque |
POST /messages/RBlockMsg | Leer mensajes de bloques con filtros |
POST /messages/get-filtered | Mensajes filtrados por etiquetas y operadores AND/OR |
PUT /messages/UpdateBlockMsg | Actualizar mensaje (modificar contenido o marcar como leído) |
Base de Datos
- Motor: MongoDB
- Conexión: Pool dinámico multi-proyecto
Colecciones Usadas
| Colección | Base de Datos | Descripción |
|---|---|---|
blockMsgs |
{projectId} |
Mensajes/notificaciones de bloques |
labels |
{projectId} |
Estructura de etiquetas para filtrado |
Estructura de blockMsgs
{
"code": "string (código del bloque)",
"message": "string (contenido del evento)",
"certified_type": "string (tipo: imagen, video, notificación, etc.)",
"certified_user": "string (usuario que generó el evento)",
"certified_date": "timestamp",
"status": "bool (leído/no leído)",
"labels": ["string (etiquetas del bloque)"],
"eventType": ["Image | Video | Manual | ..."],
"system": "bool (generado por sistema vs usuario)",
"importance": "L | M | H (Low/Medium/High)",
"CreatedAt": "timestamp"
}Variables de Entorno
| Variable | Descripción |
|---|---|
ENVIRONMENT |
Ambiente: dev, qa, prod, local |
{ENV}_PORT |
Puerto HTTP (:8113) |
{ENV}_DB_USER |
Usuario MongoDB |
{ENV}_DB_PASSWORD |
Contraseña MongoDB (sensible) |
{ENV}_DB_HOST |
Host MongoDB |
{ENV}_DB_PORT |
Puerto MongoDB |
{ENV}_ALLOWED_IPS |
IPs permitidas |
{ENV}_ALLOWED_HOSTS |
Hosts permitidos (incluye messages.bimtrazer.com) |
Filtrado de Mensajes
El endpoint POST /messages/get-filtered soporta: - Filtro AND (intersección): el mensaje debe estar en TODAS las etiquetas - Filtro OR (unión): el mensaje está en CUALQUIERA de las etiquetas - Recursividad de etiquetas: busca en etiquetas contenidas - Orden: descendente por certified_date
Validación de Clientes
La función GetDataClient() valida el usuario contra el registro de clientes del proyecto. Si el usuario está en el registro de clientes, puede reemplazarse el nombre en el mensaje.
Notas Técnicas
- Sin WebSockets: comunicación HTTP REST puro, no hay push en tiempo real
- Sin colas de mensajes: no usa RabbitMQ, Kafka ni similar
- Sin llamadas salientes: es un endpoint receptor, no emisor
Middlewares
- CORS: AllowAllOrigins=true, AllowCredentials=true
gin.Recovery(),gin.Logger()
Rol en Casos de Uso
| Caso de Uso | Rol |
|---|---|
| CU-05: Certificación | Recibe notificación de registry con el evento |
| CU-06: Carga de Fotografía | Recibe notificación de media con el evento de imagen |