Prerequisite
    npm i joi
Task 1 : Create UserSchemaValidator (user.schema.validator.js)
    const Joi = require('joi');

const options = {
abortEarly: false, // include all errors
allowUnknown: true, // ignore unknown props
stripUnknown: true // remove unknown props
};

class UserSchemaValidator {

async createUserSchema (req,res,next){
const schema = Joi.object({
name: Joi.string().required(),
email: Joi.string().email().required(),
password: Joi.string().min(6).required(),
role: Joi.string().valid('ADMIN', 'USER').required()
});

try{
let result = await schema.validateAsync(req.body, options);
console.log("Result:", result);
next();
}
catch(error){
this.handleError(error,res);
}
}
handleError(error, res) {
let errorMessages = error.details.map(x => ({ field: x.path[0], message: x.message }));
console.error(JSON.stringify(errorMessages));
let result = { status: 400, errors: errorMessages };
res.status(400).json(result);
}
}

exports.UserSchemaValidator = UserSchemaValidator;
Task 2: Add Schema Validation in user routes - create user api ( users.router.js)
    const express = require('express');
const router = express.Router();

const {UserController} = require("./user.controller");
const userController = new UserController();

const {UserSchemaValidator} = require("./user.schema.validator")

const userSchemaValidator = new UserSchemaValidator();
router.get('/', userController.getAllUsers);

//router.post('/', userController.createUser); // Without Schema Validation
router.post('/', userSchemaValidator.createUserSchema, userController.createUser);

module.exports = router;