Go · API Gateway

Servicio: api-bimtrazer

Información General


Propósito de Negocio

Centraliza:


Arquitectura

El servicio actúa como proxy inteligente: recibe peticiones del frontend, les aplica autenticación JWT y las reenvía al microservicio correspondiente (users, labels, blocks, etc.). Los handlers llaman a los servicios internos usando URLs configuradas por ambiente.

[FRONTEND]
    │
    ▼
[api-bimtrazer :8085]
    │  middleware Auth() — valida JWT en todas las rutas
    │  excepto: /users/login, /users/register, /gen-access-token, /gen-admin-token, /refresh-token
    │
    ├─► users.bimtrazer.com
    ├─► projects.bimtrazer.com
    ├─► ifc.bimtrazer.com
    ├─► labels.bimtrazer.com
    ├─► blocks.bimtrazer.com
    ├─► sequences.bimtrazer.com
    ├─► displacements.bimtrazer.com
    ├─► lblsref.bimtrazer.com
    ├─► digitaltwin.bimtrazer.com
    ├─► registry.bimtrazer.com
    ├─► worktables.bimtrazer.com
    ├─► media.bimtrazer.com
    ├─► items.bimtrazer.com
    ├─► lbp.bimtrazer.com
    ├─► priority-blocks (:8087 interno)
    ├─► process-blocks.bimtrazer.com
    ├─► new-params.bimtrazer.com
    ├─► cert-progress.bimtrazer.com
    ├─► open-ai (:8093 interno)
    ├─► whatsmeow.bimtrazer.com
    ├─► whatsapp-bot.bimtrazer.com
    ├─► whisper.bimtrazer.com
    └─► img-recognition.bimtrazer.com

Endpoints Expuestos

Autenticación y Tokens

Método Path Descripción
POST /gen-admin-token Generar token de administrador
POST /gen-access-token/:key Generar token de acceso (ruta pública)
POST /refresh-token Renovar token de acceso

Usuarios

Método Path Descripción
GET /users Listar todos los usuarios
GET /users/by-project/:projectId Usuarios de un proyecto
POST /users/login Login (ruta pública)
POST /users/register Registro de usuario (ruta pública)
POST /users/by-email Buscar usuario por email
POST /users/get-by-emails Buscar múltiples usuarios por email
POST /users/by-email-and-project Buscar usuario en proyecto específico
PUT /users Actualizar usuario
PUT users/add-views Agregar vistas a usuario en proyecto
DELETE /users Desactivar usuario
DELETE /users/remove-project Quitar proyecto del scope del usuario

Proyectos

Método Path Descripción
GET /projects Listar todos los proyectos
GET /projects/general/:projectId Datos generales del proyecto
GET /projects/:projectId Proyecto por ID
GET /projects/chart/:projectId/:labelId Gráfica de un proyecto por etiqueta
POST /projects Crear proyecto
PUT /projects Actualizar proyecto
PUT /assign Asignar proyecto a usuario
PUT /projects/assign Asignar proyecto a usuario (alias)
DELETE /projects Eliminar proyecto

Bloques (blockIfc)

Método Path Descripción
GET /blocks/sequences/:projectId Códigos de secuencias del proyecto
GET /blocks/all-blocks-file/:projectId Todos los bloques en archivo
GET /blocks/dashboard-data/:projectId/:labelCode Datos de dashboard por etiqueta
GET /blocks/label-intersection/:projectId Intersección de bloques por etiquetas
GET /blocks/:projectId/:blockCode Bloque específico por código
GET /executed-blocks/:projectId Bloques ejecutados del proyecto
POST /core/blocks-ifc Crear bloques IFC
POST /blocks/sequences Obtener info de secuencias
POST /blocks/dependencies Obtener info de dependencias
POST /blocks/create-codes Crear códigos de bloques
POST /blocks/priority/by-label Bloques prioritarios filtrados por etiqueta
POST /blocks/filtered/by-label Bloques filtrados por etiqueta
POST /blocks/label-intersection Intersección bloques/etiquetas (body)
PUT /blocks/blocks-Json Actualizar bloques JSON
PUT /workprogress Ejecutar cálculo de progreso de obra
PUT /ifc/assign-blocks-description Asignar descripción a bloques IFC
PUT /ifc/urn Actualizar URN de modelo IFC
PUT /ifc/assign-blocks-dbIds Asignar dbIds a bloques IFC
PUT /ifc/blocks-ifc Actualizar bloques IFC
DELETE /core/ifc Eliminar modelo IFC
DELETE /ifc/abortUploading Abortar subida de IFC

Bloques Prioritarios (priority-blocks)

Método Path Descripción
GET /priority/blocks/:projectId Bloques prioritarios por proyecto
GET /priority/classified-blocks/:projectId Bloques clasificados
GET /priority/blocks-to-certify/:projectId Bloques a certificar
GET /blocks/priority/:projectId Bloques prioritarios (v2)
GET /blocks/priority/classified/:projectId Bloques clasificados (v2)
GET /blocks/priority/to-certify/:projectId Bloques a certificar (v2)
POST /priority/blocks-by-label Bloques prioritarios por etiqueta
POST /priority/by-label-less-data Bloques prioritarios por etiqueta (menos datos)
POST /blocks/priority/by-label Filtro bloques prioritarios (v2)
PUT /priority/executed Actualizar valor ejecutado
PUT /priority/blocks Actualizar bloques prioritarios
PUT /blocks/priority/executed Actualizar ejecutados (v2)
DELETE /priority/blocks Deshabilitar bloques prioritarios
DELETE /blocks/priority/disable Deshabilitar bloques prioritarios (v2)

Etiquetas (labels)

Método Path Descripción
GET /core/labels/:projectId Lista de etiquetas del proyecto
GET /core/labels-report/:projectId Reporte de etiquetas
GET /core/projection-chart/:projectId Gráfica de proyección
GET /core/general-data/:projectId Datos generales del proyecto
GET /labels/by-project/:projectId Etiquetas por proyecto
GET /labels/dashboard/:projectId Etiquetas para dashboard
GET /labels/groups/:projectId Grupos de etiquetas
GET /labels/groups/alias-and-codes/:projectId Alias y códigos de grupos
GET /labels/:projectId Árbol de etiquetas del proyecto
POST /labels/labelsRecursive Etiquetas recursivas
POST /labels/labels Listar etiquetas
POST /labels/labelIntersect Intersección de etiquetas
POST /labels/groups Crear grupo de etiquetas
POST /labels Crear etiqueta
PUT /labels-calculation Ejecutar cálculo de etiquetas
PUT /labels/assign-to-dashboard Asignar etiquetas al dashboard

Progreso de Certificación (progress-certification)

Método Path Descripción
GET /cert-progress/users/by-id/:chatId Usuario por chatId
GET /cert-progress/whitelist/:chatId Verificar whitelist
GET /cert-progress/dictionaries/project-by-group/:chatId Proyecto por grupo
GET /cert-progress/sheets/available/:projectId/:spreadsheetCode Disponibilidad de hoja
GET /cert-progress/sheets/check-group/:projectId/:chatId/:sheetCode Verificar grupo en hoja
GET /cert-progress/blocks/by-sheet-code/:chatId/:sheetCode Bloques por código de hoja
POST /cert-progress/add-to-whitelist Agregar a whitelist
POST /cert-progress/send-image Enviar imagen de certificación
POST /cert-progress/send-video Enviar video de certificación
POST /cert-progress/dictionaries/assign-group Asignar grupo a proyecto
POST /certification/sheet-code Generar hoja de progreso
GET /certification/sheets/:projectId Hojas del proyecto
GET /certification/whatsapp-groups/:projectId Grupos WhatsApp del proyecto
POST /whatsapp-group Crear grupo WhatsApp
PUT /cert-progress/users Actualizar usuario de certificación
PUT /cert-progress/sheets Actualizar hoja
PUT /cert-progress/dictionaries/invite-url Actualizar URL de invitación
DELETE /sheets Deshabilitar hoja

OpenAI / Asistente IA

Método Path Descripción
GET /open-ai/messages/assistant-response/:threadId Respuesta del asistente por thread
POST /open-ai/threads Crear thread de conversación
POST /open-ai/runs Ejecutar asistente en thread
POST /open-ai/whatsapp-assistant Crear asistente de WhatsApp
PUT /open-ai/threads/add-message Agregar mensaje a thread

WhatsApp (whatsmeow)

Método Path Descripción
GET /whatsmeow/connect Conectar WhatsApp (QR)
POST /whatsmeow/feed-assistant Alimentar asistente con contexto
POST /whatsmeow/feed-assistant/general-context Alimentar con contexto general
POST /whatsmeow/handle-text-message Procesar mensaje de texto WhatsApp
POST /whatsapp/progress-certification Certificación de progreso vía WhatsApp (ruta pública)

Multi-Sign (firma múltiple)

Método Path Descripción
GET /multi-sign/actions/:projectId Acciones de firma múltiple
GET /multi-sign/signature-schemes/:projectId Esquemas de firma
GET /multi-sign/blocks/:projectId Bloques con firma múltiple
POST /multi-sign/action Crear acción de firma
POST /multi-sign/level Crear nivel de firma
POST /multi-sign/signature-scheme Crear esquema de firma
PUT /multi-sign/assign-scheme Asignar esquema a bloques
PUT /multi-sign/assign-users Asignar usuarios a nivel

Asistentes / For-Assistants

Método Path Descripción
GET /for-assistants/project-info/:projectId Info del proyecto para asistentes
GET /for-assistants/priority-data/:projectId Datos de prioridad
GET /for-assistants/worktables-data/:projectId Datos de worktables
GET /for-assistants/get-blocks/:projectId Bloques para asistente
GET /for-assistants/get-labels/:projectId Etiquetas para asistente
GET /for-assistants/get-current-date-time Fecha/hora actual
POST /for-assistants/resources-data Datos de recursos
POST /for-assistants/get-general-data Datos generales
POST /for-assistants/get-certification-history Historial de certificación
POST /for-assistants/certify-blocks Certificar bloques vía asistente
POST /for-assistants/send-photographs Enviar fotografías vía asistente
POST /for-assistants/logbook-registration Registro en bitácora

Otros

Método Path Descripción
GET /ws WebSocket endpoint
GET /test Health check
POST /process-blocks Procesar bloques (delegado a process-blocks)
POST /new-params/get-format-file Obtener archivo de formato
PUT /new-params/assign-blocks-to-item Asignar bloques a item (new-params)
PUT /new-params/upload-params Subir parámetros
POST /img-recognition Reconocimiento de imagen

Sistema de Autenticación

Middleware Auth()


WebSocket


Variables de Entorno

Variable Descripción
ENVIRONMENT Ambiente: dev, qa, prod, local
{ENV}_PORT Puerto HTTP del servicio
{ENV}_ALLOWED_ORIGINS Orígenes CORS permitidos
{ENV}_ALLOWED_HOSTS Hosts internos permitidos para middleware Auth
{ENV}_ALLOWED_PATHS Rutas públicas sin autenticación
{ENV}_WUZAPI_KEY Clave API para Wuzapi (WhatsApp)
{ENV}_WUZAPI_TOKEN Token de Wuzapi
{ENV}_PRIORITY_URL URL del servicio priority-blocks
{ENV}_CERT_PROGRESS_URL URL del servicio progress-certification
{ENV}_OPEN_AI_URL URL del servicio open-ai
{ENV}_NEW_PARAMS_URL URL del servicio new-params
{ENV}_USERS_URL URL del servicio users (bt-central)
{ENV}_PROJECTS_URL URL del servicio projects (bt-central)
{ENV}_BLOCKS_URL URL del servicio blocks (bt-central)
{ENV}_LABELS_URL URL del servicio labels (bt-central)
{ENV}_WHATSAPP_BOT_URL URL del servicio whatsapp-bot

Dependencias Clave (go.mod)

Librería Propósito
gin-gonic/gin Framework HTTP
gin-contrib/cors CORS
golang-jwt/jwt/v5 JWT
go.mongodb.org/mongo-driver MongoDB
gorilla/websocket WebSocket
go.mau.fi/whatsmeow WhatsApp (protocolo nativo)
mattn/go-sqlite3 SQLite (para whatsmeow)
rs/zerolog Logging estructurado

Alertas Técnicas


Puertos por Ambiente

Ambiente Puerto
prod :8085
qa :8085
dev :8086
local :8086