Compare commits

...

5 Commits

Author SHA1 Message Date
6c7d92deae update: validate route 2025-10-10 16:31:19 +07:00
05668b4a39 move to folder validate 2025-10-10 16:31:05 +07:00
c5b5f2ba10 add: user validate 2025-10-10 16:30:52 +07:00
82563469bd update validate route 2025-10-10 16:30:37 +07:00
e13cb845bc add: auth validate 2025-10-10 16:30:14 +07:00
4 changed files with 60 additions and 55 deletions

View File

@@ -1,5 +1,5 @@
const AuthService = require('../services/auth.service'); const AuthService = require('../services/auth.service');
const { registerSchema, loginSchema } = require('../helpers/validation'); const { registerSchema, loginSchema } = require('../validate/auth.schema')
const { setResponse } = require('../helpers/utils'); const { setResponse } = require('../helpers/utils');
const { createCaptcha } = require('../utils/captcha'); const { createCaptcha } = require('../utils/captcha');

View File

@@ -1,8 +1,7 @@
const userService = require("../services/user.service"); const userService = require("../services/user.service");
const { ErrorHandler } = require("../helpers/error"); const { ErrorHandler } = require("../helpers/error");
const { setResponse } = require("../helpers/utils"); const { setResponse } = require("../helpers/utils");
const Joi = require("joi"); const { userSchema, newPasswordSchema } = require("../validate/user.schema");
const { userSchema, newPasswordSchema } = require("../helpers/validation");
class UserController { class UserController {
// Get all users // Get all users

40
validate/auth.schema.js Normal file
View File

@@ -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,
};

View File

@@ -1,50 +1,4 @@
const Joi = require('joi'); 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 // Users Validation
@@ -74,9 +28,21 @@ const userSchema = Joi.object({
role_id: Joi.number().integer().min(1) 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 = { module.exports = {
registerSchema, userSchema,
loginSchema, newPasswordSchema,
newPasswordSchema, };
userSchema,
};