From c5b5f2ba109667ca542c48cc33daf3265ca60214 Mon Sep 17 00:00:00 2001 From: Antony Kurniawan Date: Fri, 10 Oct 2025 16:30:52 +0700 Subject: [PATCH] add: user validate --- validate/user.schema.js | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 validate/user.schema.js diff --git a/validate/user.schema.js b/validate/user.schema.js new file mode 100644 index 0000000..98dc385 --- /dev/null +++ b/validate/user.schema.js @@ -0,0 +1,48 @@ +const Joi = require("joi"); + +// ======================== +// Users Validation +// ======================== +const userSchema = Joi.object({ + fullname: Joi.string().min(3).max(100).required(), + name: Joi.string().alphanum().min(3).max(50).required(), + email: Joi.string().email().required(), + phone: Joi.string() + .pattern(/^(?:\+62|0)8\d{7,10}$/) + .required() + .messages({ + 'string.pattern.base': + 'Phone number must be a valid Indonesian number in format +628XXXXXXXXX' + }), + password: Joi.string() + .min(8) + .pattern(/[A-Z]/, 'uppercase letter') + .pattern(/[a-z]/, 'lowercase letter') + .pattern(/\d/, 'number') + .pattern(/[!@#$%^&*(),.?":{}|<>]/, 'special character') + .required() + .messages({ + 'string.min': 'Password must be at least 8 characters long', + 'string.pattern.name': 'Password must contain at least one {#name}' + }), + role_id: Joi.number().integer().min(1) +}); + +const newPasswordSchema = Joi.object({ + new_password: Joi.string() + .min(8) + .pattern(/[A-Z]/, 'uppercase letter') + .pattern(/[a-z]/, 'lowercase letter') + .pattern(/\d/, 'number') + .pattern(/[!@#$%^&*(),.?":{}|<>]/, 'special character') + .required() + .messages({ + 'string.min': 'Password must be at least 8 characters long', + 'string.pattern.name': 'Password must contain at least one {#name}' + }) +}); + +module.exports = { + userSchema, + newPasswordSchema, +}; \ No newline at end of file