import vine, { SimpleMessagesProvider } from '@vinejs/vine'; /** * Validates the role's creation action * node ace make:validator role */ export const createRoleValidator = vine.compile( vine.object({ name: vine .string() .isUnique({ table: 'roles', column: 'name' }) .trim() .minLength(3) .maxLength(255) .regex(/^[a-zA-Z0-9]+$/), //Must be alphanumeric with hyphens or underscores display_name: vine .string() .isUnique({ table: 'roles', column: 'display_name' }) .trim() .minLength(3) .maxLength(255) .regex(/^[a-zA-Z0-9]+$/), description: vine.string().trim().escape().minLength(3).maxLength(255).optional(), permissions: vine.array(vine.number()).minLength(1), // define at least one permission for the new role }), ); export const updateRoleValidator = vine.withMetaData<{ roleId: number }>().compile( vine.object({ name: vine .string() // .unique(async (db, value, field) => { // const result = await db.from('roles').select('id').whereNot('id', field.meta.roleId).where('name', value).first(); // return result.length ? false : true; // }) .isUnique({ table: 'roles', column: 'name', whereNot: (field) => field.meta.roleId, }) .trim() .minLength(3) .maxLength(255), description: vine.string().trim().escape().minLength(3).maxLength(255).optional(), permissions: vine.array(vine.number()).minLength(1), // define at least one permission for the new role }), ); 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', // 'contacts.0.email.required': 'The primary email of the contact is required', // 'contacts.*.email.required': 'Contact email is required', 'permissions.minLength': 'at least {{ options.minLength }} permission must be defined', 'permissions.*.number': 'Define permissions as valid numbers', }); createRoleValidator.messagesProvider = messagesProvider; updateRoleValidator.messagesProvider = messagesProvider;