Initial commit - Church Music Database
This commit is contained in:
79
new-site/backend/middleware/validate.js
Normal file
79
new-site/backend/middleware/validate.js
Normal file
@@ -0,0 +1,79 @@
|
||||
import { body, validationResult } from "express-validator";
|
||||
|
||||
export const validate = (validations) => {
|
||||
return async (req, res, next) => {
|
||||
await Promise.all(validations.map((validation) => validation.run(req)));
|
||||
|
||||
const errors = validationResult(req);
|
||||
if (errors.isEmpty()) {
|
||||
return next();
|
||||
}
|
||||
|
||||
res.status(400).json({
|
||||
error: "Validation Error",
|
||||
details: errors.array().map((err) => ({
|
||||
field: err.path,
|
||||
message: err.msg,
|
||||
})),
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
// Auth validations
|
||||
export const loginValidation = [
|
||||
body("email").isEmail().normalizeEmail().withMessage("Valid email required"),
|
||||
body("password")
|
||||
.isLength({ min: 6 })
|
||||
.withMessage("Password must be at least 6 characters"),
|
||||
];
|
||||
|
||||
export const registerValidation = [
|
||||
body("name")
|
||||
.trim()
|
||||
.isLength({ min: 2 })
|
||||
.withMessage("Name must be at least 2 characters"),
|
||||
body("email").isEmail().normalizeEmail().withMessage("Valid email required"),
|
||||
body("password")
|
||||
.isLength({ min: 8 })
|
||||
.withMessage("Password must be at least 8 characters")
|
||||
.matches(/\d/)
|
||||
.withMessage("Password must contain at least one number"),
|
||||
];
|
||||
|
||||
// Song validations
|
||||
export const songValidation = [
|
||||
body("title").trim().notEmpty().withMessage("Title is required"),
|
||||
body("key")
|
||||
.optional()
|
||||
.isIn([
|
||||
"C",
|
||||
"C#",
|
||||
"Db",
|
||||
"D",
|
||||
"D#",
|
||||
"Eb",
|
||||
"E",
|
||||
"F",
|
||||
"F#",
|
||||
"Gb",
|
||||
"G",
|
||||
"G#",
|
||||
"Ab",
|
||||
"A",
|
||||
"A#",
|
||||
"Bb",
|
||||
"B",
|
||||
]),
|
||||
body("tempo")
|
||||
.optional()
|
||||
.isInt({ min: 40, max: 220 })
|
||||
.withMessage("Tempo must be between 40 and 220"),
|
||||
body("lyrics").optional().isString(),
|
||||
];
|
||||
|
||||
// List validations
|
||||
export const listValidation = [
|
||||
body("name").trim().notEmpty().withMessage("Name is required"),
|
||||
body("date").optional().isISO8601().withMessage("Valid date required"),
|
||||
body("songs").optional().isArray(),
|
||||
];
|
||||
Reference in New Issue
Block a user