import vine, { SimpleMessagesProvider } from '@vinejs/vine'; /** * Validates the role's creation action * node ace make:validator user */ export const createUserValidator = vine.compile( vine.object({ login: vine .string() .trim() .minLength(3) .maxLength(20) .isUnique({ table: 'accounts', column: 'login' }) .regex(/^[a-zA-Z0-9]+$/), //Must be alphanumeric with hyphens or underscores email: vine.string().maxLength(255).email().normalizeEmail().isUnique({ table: 'accounts', column: 'email' }), password: vine.string().confirmed().trim().minLength(3).maxLength(60), roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user }), ); /** * Validates the role's update action * node ace make:validator user */ export const updateUserValidator = vine.withMetaData<{ objId: number }>().compile( vine.object({ login: vine .string() .trim() .minLength(3) .maxLength(20) .isUnique({ table: 'accounts', column: 'login', whereNot: (field) => field.meta.objId }) .regex(/^[a-zA-Z0-9]+$/), //Must be alphanumeric with hyphens or underscores email: vine .string() .maxLength(255) .email() .normalizeEmail() .isUnique({ table: 'accounts', column: 'email', whereNot: (field) => field.meta.objId }), password: vine.string().confirmed().trim().minLength(3).maxLength(60).optional(), roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user }), ); let messagesProvider = new SimpleMessagesProvider({ // Applicable for all fields 'required': 'The {{ field }} field is required', 'unique': '{{ field }} must be unique, and this value is already taken', 'string': 'The value of {{ field }} field must be a string', 'email': 'The value is not a valid email address', 'minLength': '{{ field }} must be at least {{ options.minLength }} characters long', 'maxLength': '{{ field }} must be less then {{ options.maxLength }} characters long', 'confirmed': 'Oops! The confirmation of {{ field }} is not correct. Please double-check and ensure they match.', 'roles.minLength': 'at least {{ options.minLength }} role must be defined', 'roles.*.number': 'Define roles as valid numbers', }); createUserValidator.messagesProvider = messagesProvider; updateUserValidator.messagesProvider = messagesProvider;