Propósito: Gestión de contenido multimedia (fotografías y videos) de proyectos de construcción. Almacena imágenes de bloques, genera thumbnails y mantiene sincronización con otros servicios.
Tecnología: Go 1.23.2 / Gin v1.10.0
Puerto::8114
Módulo:media
CI/CD: GitLab CI/CD
Endpoints Expuestos
Path
Descripción
POST /get-files
Obtiene lista de archivos/imágenes de un proyecto (con filtros)
POST /upload-images
Carga imágenes para bloques o como no clasificadas
POST /upload-videos
Carga videos para bloques
POST /filter
Obtiene media filtrada por etiquetas con AND/OR
POST /storage/gzip
Almacena archivo comprimido (gzip)
GET /files-data/:projectId
Metadata de archivos de un proyecto
DELETE /files
Elimina archivos de almacenamiento y BD
Base de Datos
Motor: MongoDB v1.17+
Conexión: Pool dinámico por proyecto
Colecciones Usadas
Colección
Base de Datos
Descripción
blockImgs
{projectId}
Registro de imágenes/videos asociados a bloques
blockIfc
{projectId}
Actualiza flag hasImage
labels
{projectId}
Estructura de etiquetas para filtrado
Estructura de blockImgs
{"code":"string (código del bloque)","name_user":"string","img_type":"Blocks | Unclassified","img_category":"string","valid":true,"img_name":"string","img_date":"time","is_video":false,"certified_type":"string","CreatedAt":"time"}
Variables de Entorno
Variable
Descripción
ENVIRONMENT
Ambiente: dev, qa, prod, local
{ENV}_PORT
Puerto HTTP (:8114)
{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 para llamadas internas
{ENV}_ALLOWED_HOSTS
Hosts permitidos
Almacenamiento de Archivos
El servicio usa el sistema de archivos local montado en /mnt/s3storage/ (posiblemente un volume montado):
Crea directorios por código de bloque si no existen
Guarda imagen con nombre normalizado (MAYÚSCULAS)
Genera thumbnail automáticamente
Inserta registro en blockImgs
Actualiza hasImage = true en blockIfc
Llama POST / en messages (sincrónico)
Goroutine asíncrona: llama POST /leanbim/blocks/map-and-update en lbp
Dependencias Externas
Servicio
Llamada
Propósito
Sincronía
messages
POST /
Crear notificación del evento
Síncrono
lbp
POST /leanbim/blocks/map-and-update
Sincronizar Lean BIM
Asíncrono (goroutine)
manager.bimtrazer.com
GET /sync/leanbim/update
Alternativa si no es centralizado
Asíncrono
Filtrado de Media
El endpoint POST /filter soporta: - Búsqueda por etiquetas con lógica AND/OR - Recursividad de etiquetas (etiqueta contiene sub-etiquetas) - Filtro por tipo (imagen, video, no clasificada)
Proceso de Eliminación
DELETE /files: 1. Elimina archivo del sistema de archivos local 2. Elimina registro de blockImgs en MongoDB 3. Si el bloque no tiene más imágenes → actualiza hasImage = false en blockIfc
Librerías Especiales
Librería
Uso
disintegration/imaging
Generación de thumbnails (redimensionamiento de imágenes)
Middlewares
CORS: AllowAllOrigins=true, AllowCredentials=true
Validación de IP de origen (ALLOWED_IPS)
gin.Recovery(), gin.Logger()
Rol en Casos de Uso
Caso de Uso
Rol
CU-06: Carga de Fotografía
Servicio principal
CU-09: Generación de PDF
worktables lee imágenes desde rutas de este servicio