Servicios Go/Gin

Servicio: media

Información General


Endpoints Expuestos

PathDescripción
POST /get-filesObtiene lista de archivos/imágenes de un proyecto (con filtros)
POST /upload-imagesCarga imágenes para bloques o como no clasificadas
POST /upload-videosCarga videos para bloques
POST /filterObtiene media filtrada por etiquetas con AND/OR
POST /storage/gzipAlmacena archivo comprimido (gzip)
GET /files-data/:projectIdMetadata de archivos de un proyecto
DELETE /filesElimina archivos de almacenamiento y BD

Base de Datos

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):

Tipo Ruta
Imágenes de bloques /mnt/s3storage/fotografias/{projectId}/{codeBlock}/{filename}
Imágenes sin clasificar /mnt/s3storage/{projectId}/Unclassified/{filename}
Thumbnails /mnt/s3storage/thumbnails/{projectId}/{codeBlock}/{filename}
Archivos gzip /mnt/s3storage/{projectId}/{data}

Proceso de Upload de Imagen

  1. Parse multipart form (máximo 32 MB)
  2. Valida extensión: solo .jpg, .jpeg, .png
  3. Crea directorios por código de bloque si no existen
  4. Guarda imagen con nombre normalizado (MAYÚSCULAS)
  5. Genera thumbnail automáticamente
  6. Inserta registro en blockImgs
  7. Actualiza hasImage = true en blockIfc
  8. Llama POST / en messages (sincrónico)
  9. 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


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