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() }); 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}' }) }) // ======================== // 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) }); module.exports = { registerSchema, loginSchema, newPasswordSchema, userSchema, };