Servicios Go/Gin

Servicio: projects

Información General


Endpoints Expuestos

PathDescripción
GET /projectsLista todos los proyectos activos
GET /projects/:projectIdDatos específicos de un proyecto
GET /projects/general/:projectIdDatos para vista Dashboard (general-data)
GET /projects/chart/:projectId/:labelIdDatos de gráfico de proyección por etiqueta
POST /projectsCrear/registrar nuevo proyecto
POST /projects/DashboardLabelsAgregar o quitar etiqueta del dashboard
DELETE /projectsEliminar un proyecto
PUT /projectsDesactivar un proyecto
PUT /assignAsignar proyecto a usuario(s)
PUT /update-allActualizar todos los proyectos (endpoint cron)

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
projects master Registro maestro de proyectos
project_config {projectId} Configuración específica del proyecto
blockIfc {projectId} Bloques (se crea el índice único aquí)
labels {projectId} Etiquetas (se crea el índice aquí)
users {projectId} Usuarios con acceso al proyecto
history_delete_project {projectId} Auditoría de eliminaciones

Variables de Entorno

Variable Descripción
ENVIRONMENT Ambiente: dev, qa, prod, local
{ENV}_PORT Puerto HTTP (:8099)
{ENV}_API_URL URL de la API central
{ENV}_DISPLACEMENTS_URL URL del servicio displacements
{ENV}_DB_USER Usuario MongoDB
{ENV}_DB_PASSWORD Contraseña MongoDB (sensible)
{ENV}_DB_HOST Host MongoDB
{ENV}_DB_PORT Puerto MongoDB

Dependencias Externas

Servicio Llamada Propósito
API central (users) POST {API_URL}/users/by-email Validar usuario creador al asignar proyecto

Nota de seguridad: La llamada a la API central incluye un Bearer token hardcodeado.


Lógica de Creación de Proyecto

Cuando se crea un proyecto (POST /projects): 1. Valida nombre y email del creador 2. Genera código único de proyecto (BringBlockCode) 3. Normaliza a mayúsculas: nombre, empresa, país, ciudad 4. Crea timestamps con zona horaria del proyecto 5. Inserta en master.projects 6. Crea base de datos {projectCode} con colecciones e índices: - blockIfc: índice único en campo code - labels: índice en lbl_blocks.code 7. Inserta configuración inicial en {projectCode}.project_config 8. Asigna bucket S3 si se provee


Estructura de project_config

{
  "code": "string",
  "name_project": "string",
  "start_date": "time",
  "end_date": "time",
  "name_country": "string",
  "time_zone": "string",
  "utc": "string",
  "in_certification": false,
  "wp_in_progress": false,
  "gantt_change": false,
  "multi_description": false,
  "digitaltwin_lbl": [],
  "history_lbl": [],
  "filter_labels": [],
  "filter_lbp": [],
  "change_graph": false,
  "displacements_in_progress": false,
  "bucket": "string"
}

Middlewares


Rol en Casos de Uso

Caso de Uso Rol
CU-02: Carga de IFC Recibe llamada de ifc para crear códigos
CU-03: Creación de Proyecto Servicio principal
CU-07: Gemelo Digital Provee configuración del proyecto