Servicio: process-blocks
Información General
- Propósito: Procesamiento masivo de bloques constructivos. Gestiona la creación/actualización de bloques en MongoDB, el cálculo de fechas de desplazamiento y la limpieza de duplicados.
- Tecnología: Go 1.23.2 / Gin
- Puerto:
:8112(local). URL externa:https://process-blocks.bimtrazer.com - Módulo:
process-blocks - CI/CD:
update-docker.sh
Propósito de Negocio
Es el motor de procesamiento de datos de bloques a bajo nivel. Cuando se carga un nuevo modelo IFC o se actualizan avances masivamente, este servicio:
- Crea o actualiza los bloques en
blockIfc - Recalcula todas las fechas de desplazamiento del proyecto
- Mantiene los valores de ejecución actualizados
- Elimina duplicados para mantener consistencia de datos
Endpoints Expuestos
| Método | Path | Descripción |
|---|---|---|
POST |
/process-blocks |
Crear o actualizar bloques en la BD |
POST |
/historical-advancement-record |
Crear registro histórico de avance |
PUT |
/all-displacement-dates |
Actualizar todas las fechas de desplazamiento del proyecto |
PUT |
/execution-value |
Actualizar valores de ejecución de bloques |
DELETE |
/disable-found-blocks |
Deshabilitar bloques encontrados (por criterio) |
DELETE |
/labels/duplicated-blocks |
Eliminar bloques duplicados dentro de etiquetas |
DELETE |
/delete-duplicated-blocks |
Eliminar bloques duplicados en la colección principal |
POST /process-blocks — Operación de creación/actualización masiva de bloques (CreateOrUpdateBlocks). Recibe una lista de bloques con sus atributos y los inserta o actualiza en la colección blockIfc. Es el equivalente a un upsert masivo.
PUT /all-displacement-dates — Recalcula y actualiza las fechas de desplazamiento (displacement_date) de todos los bloques del proyecto. Operación costosa, usa BulkWrite de MongoDB.
DELETE /labels/duplicated-blocks — Detecta y elimina referencias duplicadas a bloques dentro de las etiquetas (labels). Mantiene la consistencia del array lbl_blocks.
Pool Multi-Cliente MongoDB
El servicio implementa un MongoDBManager con múltiples clientes simultáneos:
| Cliente | Propósito |
|---|---|
CENTRALIZED |
MongoDB centralizado (todos los proyectos en un servidor) |
manager |
MongoDB del manager (base master con metadatos) |
manager := mogodbClient.NewMongoDBManager(4) // máximo 4 clientes
Variables de Entorno
| Variable | Descripción |
|---|---|
PORT |
Puerto HTTP |
DB_HOST_CENTRALIZED |
Host MongoDB centralizado |
DB_HOST_MANAGER |
Host MongoDB del manager |
DB_USER |
Usuario MongoDB |
DB_PASSWORD |
Contraseña MongoDB |
MAX_CONNS |
Máximo de conexiones en pool |
MIN_CONNS |
Mínimo de conexiones en pool |
Middlewares
- CORS: completamente abierto (
AllowAllOrigins = true) gin.Recovery(),gin.Logger()OptionsMiddleware()— manejo de preflight CORS OPTIONSAuthMiddleware()— comentado (sin autenticación propia)
Rol en el Sistema
[api-bimtrazer]
│
▼
[process-blocks :8112]
│
├── Escribe → blockIfc (crear/actualizar bloques)
├── Escribe → historical_advancement (registros históricos)
├── Actualiza → blockIfc.displacement_date (fechas desplazadas)
├── Actualiza → blockIfc.val_executed (valores de ejecución)
└── Limpia → blockIfc, labels (eliminación de duplicados)
Alertas Técnicas
- CORS completamente abierto — cualquier origen puede invocar el servicio directamente
AuthMiddlewarecomentado — sin autenticación propia (debe estar detrás deapi-bimtrazer)- Las operaciones
DELETE /labels/duplicated-blocksyDELETE /delete-duplicated-blocksson potencialmente destructivas y no tienen confirmación ni soft-delete PUT /all-displacement-datespuede ser muy costoso en proyectos con miles de bloques — sin timeout explícito configurado- El directorio se llama
mogodbClient(typo:mogoen vez demongo) — no afecta funcionalidad pero es confuso