add chnanges

This commit is contained in:
Swapnil Bendal
2024-12-10 20:57:52 +05:30
parent ca6d4551ca
commit ac7b46c661
16 changed files with 2064 additions and 3965 deletions

View File

@@ -5,40 +5,42 @@ import logger from '../config/logger';
class error {
static errorConverter(
err: any,
err: ApiError,
req: Request,
res: Response,
next: NextFunction
): void {
let error = err;
// Define a broader type for error
let error: ApiError | Error & { statusCode?: number; errors?: Error[] } = err;
// Handle Sequelize validation and unique constraint errors
const messages = error.errors.map((e: Error) => e.message);
error = new ApiError(
400,
messages.join(', '),
messages,
true,
err.stack
);
if (error.errors && Array.isArray(error.errors)) {
const messages = error.errors.map((e: Error) => e.message);
error = new ApiError(
400,
messages.join(', '),
messages,
true,
err.stack
);
}
if (!(error instanceof ApiError)) {
// Handle other errors
const statusCode =
error.statusCode
? 400
: 500;
const statusCode = error.statusCode || 500;
const message = error.message || "Something went wrong";
error = new ApiError(statusCode, message, error, false, err.stack);
error = new ApiError(statusCode, message, [], false, err.stack);
}
next(error);
}
static errorHandler(
err: any,
err: ApiError,
req: Request,
res: Response,
next: NextFunction
res: Response
): void {
let { statusCode, message } = err;

View File

@@ -1,7 +1,7 @@
import { pick } from '../utils/handler/pick.handler';
import { Request, Response, NextFunction } from 'express';
import * as Yup from 'yup';
import { ObjectSchema, ValidationError } from 'yup';
import ApiError from '../utils/helper/ApiError';
import { pick } from '../utils/handler/pick.handler';
/**
* Validation middleware for Express routes.
@@ -9,7 +9,7 @@ import ApiError from '../utils/helper/ApiError';
* @returns Middleware function to validate request properties.
*/
const validate =
(schema: Partial<Record<keyof Request, Yup.ObjectSchema<any>>>) =>
(schema: Partial<Record<keyof Request, ObjectSchema<never>>>) =>
(req: Request, res: Response, next: NextFunction): void => {
// Define valid request keys explicitly
const validRequestKeys = ['params', 'query', 'body', 'file', 'files'] as (keyof Request)[];
@@ -31,11 +31,12 @@ const validate =
// Assign validated values back to the request object
validatedValues.forEach((value, index) => {
const key = Object.keys(validSchema)[index];
(req as any)[key] = value; // Type assertion since req is mutable
// Safely assign the validated value to the request object
req[key as keyof Request] = value; // Use `Request` here instead of `Request.ResBody`
});
next();
})
.catch((err: Yup.ValidationError) => {
.catch((err: ValidationError) => {
// Collect and format error messages
const errorMessage = err.inner.map((detail) => detail.message).join(', ');
next(new ApiError(400, errorMessage));