Servicios Go/Gin

Servicio: users

Información General


Propósito de Negocio

Centraliza: - Registro y login de usuarios (email/password y Google OAuth) - Asignación de usuarios a proyectos con roles y vistas específicas - Control granular de permisos (certify, whatsappAssistant, CCA) - Generación de tokens JWT para acceso a la plataforma


Endpoints Expuestos

PathDescripción
POST /users/loginLogin con email/password o Google
POST /users/registerRegistro de nuevo usuario
POST /users/by-emailBuscar usuario por email
POST /users/by-email-and-projectBuscar usuario en proyecto específico
POST /users/get-by-emailsBuscar múltiples usuarios por emails (bulk)
GET /usersListar todos los usuarios
GET /users/by-project/:projectIdUsuarios de un proyecto
GET /users/by-project/v2/:projectIdUsuarios de un proyecto (versión mejorada)
GET /users/by-phone-number/:projectId/:phoneNumberBuscar por teléfono en proyecto
GET /users/permissions/:projectIdUsuarios con permisos detallados del proyecto
GET /all-cca/:projectIdUsuarios con rol CCA en el proyecto
PUT /usersActualizar datos básicos de usuario
PUT /users/add-viewsAgregar vistas a un usuario en un proyecto
PUT /update-permissionsActualizar permisos binarios
PUT /update-permissions/by-phone-numberPermisos actualizados por teléfono
PUT /phone-numberActualizar número de teléfono
DELETE /usersDesactivar usuario (status=false)
DELETE /users/remove-projectDesactivar proyecto del scope del usuario

Base de Datos

Colecciones Usadas

Colección Base de Datos Descripción
users master Registro global de usuarios (email único)

Estructura del Documento Usuario

{
  "_id": "ObjectId",
  "name": "string",
  "email": "string (ÚNICO — clave principal)",
  "charge": "string (cargo/puesto)",
  "profile": "string",
  "scope": [
    {
      "code": "projectId",
      "project": "nombre del proyecto",
      "labels": ["labelCode1", "labelCode2"],
      "views": ["dashboard", "gantt", "..."],
      "status": true
    }
  ],
  "status": true,
  "phone": ["string"],
  "userId": "string (Google ID)",
  "pass_user": "string (hash bcrypt)"
}

Variables de Entorno

Variable Descripción
ENVIRONMENT Ambiente: dev, qa, prod
{ENV}_PORT Puerto HTTP
{ENV}_API_URL URL de la API para generación de tokens
{ENV}_DB_USER Usuario MongoDB
{ENV}_DB_PASSWORD Contraseña MongoDB (sensible)
{ENV}_DB_HOST Host MongoDB
{ENV}_DB_PORT Puerto MongoDB

Sistema de Autenticación

Login Dual

Opción 1 — Email + Password:

hash_almacenado = bcrypt(email + password)
En login: bcrypt.Compare(email + password, hash_almacenado)

Opción 2 — Google Sign-In:

userId = Google ID del usuario
Validación directa contra userId almacenado en BD

Generación de JWT

Después de validar credenciales: 1. Llama a POST {API_URL}/gen-access-token/... con Bearer token interno 2. Recibe: token (JWT de acceso) + refreshToken 3. Retorna ambos tokens al cliente junto con la lista de proyectos

Nota de seguridad: El Bearer token usado para generar tokens JWT está hardcodeado en el código fuente. Debe migrarse a variable de entorno o vault.


Dependencias Externas

Servicio Llamada Propósito
API Gateway POST /gen-access-token/... Obtener JWT de acceso

Roles y Permisos

Campo Tipo Significado
scope[].views[] array Vistas de la plataforma accesibles (dashboard, gantt, digitaltwin, etc.)
scope[].labels[] array Etiquetas visibles para el usuario en el proyecto
scope[].status bool Acceso activo/inactivo al proyecto
permissions.certify bool Puede certificar bloques de construcción
permissions.whatsappAssistant bool Recibe notificaciones WhatsApp
isCca bool Es Coordinador de Control de Obra (CCA)

Middlewares


Rol en Casos de Uso

Caso de Uso Rol
CU-01: Login Servicio principal
CU-03: Creación de Proyecto projects valida creador vía este servicio
CU-05: Certificación registry valida permisos del usuario aquí