From e13cb845bc654acda9303059bcab54a2e31796d2 Mon Sep 17 00:00:00 2001 From: Antony Kurniawan Date: Fri, 10 Oct 2025 16:30:14 +0700 Subject: [PATCH] add: auth validate --- validate/auth.schema.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 validate/auth.schema.js diff --git a/validate/auth.schema.js b/validate/auth.schema.js new file mode 100644 index 0000000..11d834d --- /dev/null +++ b/validate/auth.schema.js @@ -0,0 +1,40 @@ +const Joi = require("joi"); + +// ======================== +// Auth Validation +// ======================== +const registerSchema = 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}' + }) +}); + +const loginSchema = Joi.object({ + identifier: Joi.string().required(), + password: Joi.string().required(), + captcha: Joi.string().required(), + captchaText: Joi.string().required() +}); + +module.exports = { + registerSchema, + loginSchema, +}; \ No newline at end of file