const {body} = require('express-validator') const db = require('../../db') const validators = module.exports = {} validators.passwordRestrictions = body('password').isString().isLength({min: 8, max: 100}).withMessage('Password must be at least 8 characters') validators.bothPasswordsMatch = body('password').custom((pass, {req})=>{ if(pass !== req.body.password2) throw new Error('Passwords do not match') return true }) validators.emailRestrictions = body('email').isString().isEmail().withMessage('Email invalid') validators.checkEmailNotUsed = body('email').custom(async email=>{ const user = await db.user.findByEmail(email) if(user) throw new Error('Email already in use') }) validators.urlSlugRestrictions = body('urlslug').isString().isLength({min: 3, max: 20}).matches(/^[-a-z0-9_]*$/i) .withMessage('Slug can be between 3-20 characters long, and can include letters, numbers, dash or underscore') validators.nameRestrictions = body('name').isString() .withMessage('Name required. Must be a string') validators.descriptionRestrictions = body('description').isString() .withMessage('Description required. Must be a string') validators.publishedBool = body('published').isBoolean() validators.priceCentsInt = body('price_cents').isInt().custom(price => price > 0) .withMessage('Price must be a positive integer')