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
- 200
- 400
- 401
- 403
- 406
Usuario creado exitosamente
Solicitud inválida. Posibles causas:
- Email no proporcionado
- Error al guardar (rollback automático)
No autorizado (se requiere rol admin o dev)
Prohibido. Posibles causas:
- Usuario no es administrador
- Plan no permite crear más usuarios
Email ya existe en la base de datos