Saltar al contenido principal

Create new user (Admin only)

POST 

/company/users/

Crea un nuevo usuario para la compañía. Solo administradores pueden crear usuarios.

Objective

Permitir a administradores agregar nuevos usuarios a su compañía con control sobre el límite de usuarios según el plan de suscripción.

Use Cases

  • Agregar un nuevo empleado a la plataforma
  • Crear cuenta para un nuevo gestor
  • Añadir usuarios administrativos

Authentication & Authorization

  • Requiere JWT válido (middleware m.isLoged)
  • Requiere rol admin o dev (middleware m.isAdmin)
  • Requiere validación UTC (mTools.checkUTC)
  • Verifica límite de usuarios del plan (mPlan.canCreateUser)

Behavior

  • Valida que el email no exista en la base de datos
  • Si no se proporciona password, genera una automáticamente con tools.generatePass()
  • Crea usuario con model.createData()
  • Añade usuario al array company.users[]
  • Registra el uso en billing service (BillingService.recordUsage)
  • Envía email con credenciales usando mail.sendNewPass()

Validations

  • Email requerido y único
  • Usuario se añade a la compañía del admin
  • Billing service verifica límite de usuarios del plan
  • Si falla la creación en compañía, elimina el usuario (rollback)

Password Handling

  • Si se proporciona password en el body, se usa esa
  • Si no se proporciona, se genera automáticamente: 8 caracteres, mayúsculas, minúsculas, números
  • La contraseña se hashea con model.getPassword()
  • Se envía por email al usuario

Validation Flow

flowchart TD
A[Recibir POST /] --> B{Usuario Admin?}
B -->|No| C[403 Forbidden]
B -->|Sí| D{Email Proporcionado?}
D -->|No| E[400 FORM_DATA_NOT_VALID]
D -->|Sí| F{Email Existe?}
F -->|Sí| G[406 USER_ALREADY_EXIST]
F -->|No| H{Plan Permite Usuario?}
H -->|No| I[403 PLAN_LIMIT_REACHED]
H -->|Sí| J[Generar Password si no hay]
J --> K[Crear Usuario model.createData]
K --> L[Añadir a company.users]
L --> M{Guarda Company?}
M -->|No| N[Eliminar usuario y 400]
M -->|Sí| O[Registrar en Billing]
O --> P[Enviar Email con password]
P --> Q[Retornar 201 User]

Request

Responses

Usuario creado exitosamente