diff --git a/helpers/authValidation.js b/helpers/authValidation.js deleted file mode 100644 index 2bd6a72..0000000 --- a/helpers/authValidation.js +++ /dev/null @@ -1,36 +0,0 @@ -const Joi = require('joi'); - -const registerSchema = Joi.object({ - fullname: Joi.string().min(3).max(100).required(), - username: 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() -}); - -module.exports = { - registerSchema, - loginSchema -}; diff --git a/helpers/validation.js b/helpers/validation.js new file mode 100644 index 0000000..ceb7584 --- /dev/null +++ b/helpers/validation.js @@ -0,0 +1,58 @@ +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' + }) +}); + +module.exports = { + registerSchema, + loginSchema, + deviceSchema +};