All files / src/utils schemaValidator.ts

95.45% Statements 42/44
100% Branches 0/0
0% Functions 0/1
95.45% Lines 42/44

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 511x 1x     1x 1x     1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x   1x 1x 1x 1x 1x 1x 1x  
import { t } from 'elysia';
import { VALID_ROLES } from '../constants/roles';
 
// Custom validator for roles that throws a specific error
const RoleValidator = t.String({
	validate: (value: string) => {
		return VALID_ROLES.includes(value as (typeof VALID_ROLES)[number]);
	},
	error: `El rol proporcionado no es válido. Debe ser uno de los siguientes: ${VALID_ROLES.join(
		', '
	)}`,
});
 
export const createUserValidator = t.Object({
	email: t.String({
		format: 'email',
		error: 'Debe proporcionar un email válido',
	}),
	password: t.String({
		minLength: 6,
		error:
			'La contraseña debe tener al menos 6 caracteres, incluir una letra minúscula, un número y un carácter no alfanumérico',
	}),
	role: t.String(RoleValidator),
});
 
export const loginUserValidator = t.Object({
	email: t.String({
		format: 'email',
		error: 'Debe proporcionar un email válido',
	}),
	password: t.String({
		error: 'Debe proporcionar una contraseña',
	}),
});
 
export const resetPasswordValidator = t.Object({
	email: t.String({
		format: 'email',
		error: 'Debe proporcionar un email válido',
	}),
});
 
export const updateUserValidator = t.Object({
	email: t.Optional(t.String({
		format: 'email',
		error: 'Debe proporcionar un email válido',
	})),
	role: t.Optional(t.String(RoleValidator)),
});