Initial commit
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
const config = require('../config');
|
||||
|
||||
module.exports = (sequelize) => {
|
||||
const { User } = sequelize.models;
|
||||
let MOCK_USER_ID = null;
|
||||
|
||||
return async (req, res, next) => {
|
||||
if (!MOCK_USER_ID) {
|
||||
const user = await User.findOne({
|
||||
where: { name: config.MOCK_AUTH.DEFAULT_USER_NAME },
|
||||
});
|
||||
if (user) {
|
||||
MOCK_USER_ID = user.id;
|
||||
}
|
||||
}
|
||||
req.userId = MOCK_USER_ID;
|
||||
next();
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
const { AppError } = require('../shared/errors');
|
||||
const ResponseHandler = require('../shared/response.handler');
|
||||
const config = require('../config');
|
||||
|
||||
const errorHandler = (err, req, res, next) => {
|
||||
if (config.isDevelopment) {
|
||||
console.error('Error caught by middleware:', err);
|
||||
}
|
||||
|
||||
if (err instanceof AppError) {
|
||||
return ResponseHandler.error(res, err.message, err.statusCode, err.errors);
|
||||
}
|
||||
|
||||
if (
|
||||
err.name === 'SequelizeValidationError' ||
|
||||
err.name === 'SequelizeUniqueConstraintError'
|
||||
) {
|
||||
const errors = err.errors
|
||||
? err.errors.map((e) => ({ field: e.path, message: e.message }))
|
||||
: null;
|
||||
return ResponseHandler.badRequest(res, 'Validation error', errors);
|
||||
}
|
||||
|
||||
if (err.name === 'ValidationError' && err.errors) {
|
||||
const errors = Object.keys(err.errors).map((key) => ({
|
||||
field: key,
|
||||
message: err.errors[key].message,
|
||||
}));
|
||||
return ResponseHandler.badRequest(res, 'Validation error', errors);
|
||||
}
|
||||
|
||||
if (err.name === 'CastError') {
|
||||
return ResponseHandler.badRequest(res, 'Invalid ID format');
|
||||
}
|
||||
|
||||
const message = config.isDevelopment ? err.message : 'Internal server error';
|
||||
return ResponseHandler.internalError(res, message, err);
|
||||
};
|
||||
|
||||
module.exports = errorHandler;
|
||||
@@ -0,0 +1,23 @@
|
||||
const { ValidationError } = require('../shared/errors');
|
||||
|
||||
const validate = (schema) => {
|
||||
return (req, res, next) => {
|
||||
const { error, value } = schema.validate(req.body, {
|
||||
abortEarly: false,
|
||||
stripUnknown: true,
|
||||
});
|
||||
|
||||
if (error) {
|
||||
const errors = error.details.map((detail) => ({
|
||||
field: detail.path.join('.'),
|
||||
message: detail.message,
|
||||
}));
|
||||
return next(new ValidationError('Validation failed', errors));
|
||||
}
|
||||
|
||||
req.body = value;
|
||||
next();
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = { validate };
|
||||
Reference in New Issue
Block a user