Skip to main content

UserModel

Define el esquema de validación para el modelo de usuario (userSchema) utilizando Zod, con múltiples reglas que garantizan integridad, formato correcto y lógica condicional según el tipo y rol del usuario.


🔍 Ubicación

src/models/EquipoDTO.ts


🧩 Esquema base (userSchema)

CampoTipo/ZodObligatorioValidaciones y Reglas
usernamestring()✅ SíMínimo 3 caracteres, sin espacios extremos.
correostring().email()✅ SíDebe ser un correo válido.
passwordstring()✅ SíMínimo 8 caracteres, debe incluir: una mayúscula, una minúscula, un número y un carácter especial.
nombreCompletostring()✅ SíMínimo 3 caracteres.
telefonostring().regex()✅ SíFormato internacional y nacional aceptado.
direccionstring()✅ SíMínimo 5 caracteres.
fotoPerfilstring().url() (opcional)❌ NoDebe ser una URL válida.
nombreEmpresastring() (opcional)❌ CondicionalRequerido si tipoUsuario es "EMPRESARIAL".
nitstring().regex() (opcional)❌ CondicionalEntre 9 y 15 dígitos. Obligatorio para tipo "EMPRESARIAL".
estadoenum(["activo", "inactivo"])❌ NoPor defecto "activo".
rolenum(["USUARIO", "EQUIPO", "ADMIN", "DESARROLLADOR"])✅ SíDefine el tipo de rol principal del usuario.
rolEquipoenum(["LECTOR", "COMENTARISTA", "EDITOR"]) (opcional)❌ NoAplica si rol es "EQUIPO".
tipoUsuarioenum(["INDIVIDUAL", "EMPRESARIAL"]) (opcional)❌ CondicionalRequerido si rol es "USUARIO".
empresaIdnumber().int().positive() (opcional)❌ CondicionalRequerido si rol es "EQUIPO".
perfilCompletoboolean() (opcional)❌ NoIndica si el perfil ha sido completado por el usuario.

✅ Validaciones adicionales (.refine())

  1. tipoUsuario obligatorio si el rol es USUARIO

    • 🔒 Si rol es "USUARIO", entonces tipoUsuario es obligatorio.
    • 🧠 Mensaje: "El tipo de usuario es obligatorio si el rol es USUARIO."
  2. nombreEmpresa y nit requeridos para EMPRESARIAL

    • 🔒 Si tipoUsuario es "EMPRESARIAL", debe incluir ambos campos.
    • 🧠 Mensaje: "El nombre de la empresa y el NIT son obligatorios para los usuarios empresariales."
  3. empresaId requerido para EQUIPO

    • 🔒 Si rol es "EQUIPO", debe incluir empresaId numérico positivo.
    • 🧠 Mensaje: "El campo 'empresaId' es obligatorio para usuarios con rol EQUIPO."
  4. Restricción para INDIVIDUAL: no debe tener nombreEmpresa ni nit

    • 🔒 Si tipoUsuario es "INDIVIDUAL", entonces NO debe incluir nombreEmpresa ni nit.
    • 🧠 Mensaje: "Los usuarios individuales no deben tener nombre de empresa ni NIT."

🧪 Tipo inferido

export type ValidatedUser = z.infer<typeof userSchema>;