Initial commit

This commit is contained in:
Lorenzo Sanesi
2026-03-26 22:46:03 +01:00
commit 18e0e04700
80 changed files with 13114 additions and 0 deletions
+19
View File
@@ -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();
};
};
+40
View File
@@ -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;
+23
View File
@@ -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 };