This commit is contained in:
jalvarado
2025-04-07 11:17:30 -06:00
parent a0e86b3873
commit b2e639efcb
9 changed files with 520 additions and 91 deletions
+38
View File
@@ -0,0 +1,38 @@
import { AxiosError } from 'axios';
export const getAxiosError = (error: unknown): ErrorState => {
console.error('AXIOS ERROR', error);
if (error instanceof AxiosError) {
if (error.response?.data?.message) {
if (error.response.data.message === 'Internal server error') {
return {
code: 500,
message:
'Ocurrió un error inesperado, por favor intenta de nuevo más tarde',
status: true,
};
}
return {
code: error.response.status,
message: error.response.data.message,
status: true,
};
}
if (error.message === 'Network Error') {
return {
code: 0,
message: 'Error de conexión, por favor verifica tu conexión a internet',
status: true,
};
}
}
return {
code: 0,
message: 'Ocurrió un error inesperado',
status: true,
};
};
+44 -36
View File
@@ -20,18 +20,18 @@ export class ValidadorCorreo extends Validador {
if (!valor) {
return {
valido: false,
mensaje: 'El correo electrónico es requerido'
mensaje: 'El correo electrónico es requerido',
};
}
// Expresión regular para validar correos
// Valida el formato básico de correos: usuario@dominio.extensión
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
if (!regex.test(valor)) {
return {
valido: false,
mensaje: 'El formato del correo electrónico no es válido'
mensaje: 'El formato del correo electrónico no es válido',
};
}
@@ -39,18 +39,19 @@ export class ValidadorCorreo extends Validador {
if (this.validarDominioInstitucional) {
const dominios = ['acatlan.unam.mx', 'unam.mx', 'comunidad.unam.mx'];
const dominio = valor.split('@')[1];
if (!dominios.includes(dominio)) {
return {
valido: false,
mensaje: 'Debe ser un correo institucional (@acatlan.unam.mx, @unam.mx, @comunidad.unam.mx)'
mensaje:
'Debe ser un correo institucional (@acatlan.unam.mx, @unam.mx, @comunidad.unam.mx)',
};
}
}
return {
valido: true,
mensaje: 'Correo electrónico válido'
mensaje: 'Correo electrónico válido',
};
}
@@ -66,32 +67,32 @@ export class ValidadorTelefono extends Validador {
if (!valor) {
return {
valido: false,
mensaje: 'El número telefónico es requerido'
mensaje: 'El número telefónico es requerido',
};
}
// Eliminar espacios, guiones y paréntesis para la validación
const numeroLimpio = valor.replace(/[\s\-()]/g, '');
// Verificar que solo contenga dígitos
if (!/^\d+$/.test(numeroLimpio)) {
return {
valido: false,
mensaje: 'El número telefónico solo debe contener dígitos'
mensaje: 'El número telefónico solo debe contener dígitos',
};
}
// Verificar longitud (para México, 10 dígitos)
if (numeroLimpio.length !== 10) {
return {
valido: false,
mensaje: 'El número telefónico debe tener 10 dígitos'
mensaje: 'El número telefónico debe tener 10 dígitos',
};
}
return {
valido: true,
mensaje: 'Número telefónico válido'
mensaje: 'Número telefónico válido',
};
}
}
@@ -99,10 +100,13 @@ export class ValidadorTelefono extends Validador {
// Clase para validar nombres
export class ValidadorNombre extends Validador {
validar(valor: string): ResultadoValidacion {
const regex = new RegExp(
'/^[A-Za-zÁÉÍÓÚáéíóúÑñ]+(?: [A-Za-zÁÉÍÓÚáéíóúÑñ]+)*$/'
);
if (!valor) {
return {
valido: false,
mensaje: 'El nombre es requerido'
mensaje: 'El nombre es requerido',
};
}
@@ -110,21 +114,21 @@ export class ValidadorNombre extends Validador {
if (valor.trim().length < 2) {
return {
valido: false,
mensaje: 'El nombre debe tener al menos 2 caracteres'
mensaje: 'El nombre debe tener al menos 2 caracteres',
};
}
// Verificar que solo contenga letras y espacios
if (!/^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ\\s]+$/.test(valor)) {
if (regex.test(valor)) {
return {
valido: false,
mensaje: 'El nombre solo debe contener letras y espacios'
mensaje: 'El nombre solo debe contener letras y espacios',
};
}
return {
valido: true,
mensaje: 'Nombre válido'
mensaje: 'Nombre válido',
};
}
}
@@ -142,7 +146,7 @@ export class ValidadorEntero extends Validador {
if (!valor) {
return {
valido: false,
mensaje: 'El valor numérico es requerido'
mensaje: 'El valor numérico es requerido',
};
}
@@ -150,23 +154,23 @@ export class ValidadorEntero extends Validador {
if (!/^-?\d+$/.test(valor)) {
return {
valido: false,
mensaje: 'El valor debe ser un número entero'
mensaje: 'El valor debe ser un número entero',
};
}
const numero = parseInt(valor, 10);
// Verificar rango
if (numero < this.min || numero > this.max) {
return {
valido: false,
mensaje: `El valor debe estar entre ${this.min} y ${this.max}`
mensaje: `El valor debe estar entre ${this.min} y ${this.max}`,
};
}
return {
valido: true,
mensaje: 'Número entero válido'
mensaje: 'Número entero válido',
};
}
}
@@ -185,7 +189,7 @@ export class ValidadorDecimal extends Validador {
if (!valor) {
return {
valido: false,
mensaje: 'El valor numérico es requerido'
mensaje: 'El valor numérico es requerido',
};
}
@@ -193,17 +197,17 @@ export class ValidadorDecimal extends Validador {
if (!/^-?\d+(\.\d+)?$/.test(valor)) {
return {
valido: false,
mensaje: 'El valor debe ser un número decimal válido'
mensaje: 'El valor debe ser un número decimal válido',
};
}
const numero = parseFloat(valor);
// Verificar rango
if (numero < this.min || numero > this.max) {
return {
valido: false,
mensaje: `El valor debe estar entre ${this.min} y ${this.max}`
mensaje: `El valor debe estar entre ${this.min} y ${this.max}`,
};
}
@@ -212,13 +216,13 @@ export class ValidadorDecimal extends Validador {
if (partes.length > 1 && partes[1].length > this.decimales) {
return {
valido: false,
mensaje: `El valor debe tener máximo ${this.decimales} decimales`
mensaje: `El valor debe tener máximo ${this.decimales} decimales`,
};
}
return {
valido: true,
mensaje: 'Número decimal válido'
mensaje: 'Número decimal válido',
};
}
}
@@ -229,7 +233,7 @@ export class ValidadorCuentaAlumno extends Validador {
if (!valor) {
return {
valido: false,
mensaje: 'La cuenta de alumno es requerida'
mensaje: 'La cuenta de alumno es requerida',
};
}
@@ -237,13 +241,14 @@ export class ValidadorCuentaAlumno extends Validador {
if (!/^\d{9}$/.test(valor)) {
return {
valido: false,
mensaje: 'La cuenta de alumno debe tener exactamente 9 dígitos numéricos'
mensaje:
'La cuenta de alumno debe tener exactamente 9 dígitos numéricos',
};
}
return {
valido: true,
mensaje: 'Cuenta de alumno válida'
mensaje: 'Cuenta de alumno válida',
};
}
}
@@ -273,15 +278,18 @@ export class FabricaValidadores {
}
// Función auxiliar para validar respuestas basada en el tipo de validación
export function validarRespuesta(respuesta: string, tipoValidacion: string): ResultadoValidacion {
export function validarRespuesta(
respuesta: string,
tipoValidacion: string
): ResultadoValidacion {
const validador = FabricaValidadores.crear(tipoValidacion);
if (!validador) {
return {
valido: true, // Si no hay validador, consideramos válida la respuesta
mensaje: 'No se requiere validación específica'
mensaje: 'No se requiere validación específica',
};
}
return validador.validar(respuesta);
}
}