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({ email: Joi.string().email().required(), password: Joi.string().required(), captcha: Joi.string().required(), captchaText: Joi.string().required() }); // ======================== // Device Validation // ======================== const deviceSchema = Joi.object({ device_code: Joi.string().max(100).required(), device_name: Joi.string().max(100).required(), device_status: Joi.boolean().required(), device_location: Joi.string().max(100).required(), device_description: Joi.string().required(), ip_address: Joi.string() .ip({ version: ['ipv4', 'ipv6'] }) .required() .messages({ 'string.ip': 'IP address must be a valid IPv4 or IPv6 address' }) }); const deviceUpdateSchema = Joi.object({ device_code: Joi.string().max(100), device_name: Joi.string().max(100), device_status: Joi.boolean(), device_location: Joi.string().max(100), device_description: Joi.string(), ip_address: Joi.string() .ip({ version: ['ipv4', 'ipv6'] }) .messages({ 'string.ip': 'IP address must be a valid IPv4 or IPv6 address' }) }).min(1); module.exports = { registerSchema, loginSchema, deviceSchema, deviceUpdateSchema };