import { Error, MongooseError } from "mongoose";
import { HttpCodes } from "../config/Errors.js";
import { Response as ExpressResponse } from "express";
import { MongoError } from "mongodb";
import { assert } from "console";
// Helper function to extract the duplicate key from the error message
function extractDuplicateKey(errorMessage: string): string | null {
const match = errorMessage.match(/index:\s+([^\s]+)/);
return match ? match[1] : "unknown";
}
export function ErrorResponse(res: ExpressResponse, code: number, errorMessage: string, error?: unknown) {
const response: ErrorResponseI =
error && error instanceof Error.ValidationError && error.errors
? {
status: "error",
message: Object.values(error.errors)
.map((err) => err.message)
.join(","),
code: HttpCodes.BadRequest.code,
error,
}
: error && error instanceof MongoError && error.code === 11000
? {
status: "error",
message: `These keys already exist [${extractDuplicateKey(error.message)}], it's not allowed to use duplicate keys`,
code: HttpCodes.BadRequest.code,
error,
}
: {
status: "error",
message: errorMessage,
code: code,
error,
};
res.status(response.code).send(response);
}
export function SuccessResponse(res: ExpressResponse, code: number, data: unknown, message = "Successful", status = "success") {
assert(code < 300, "Success code must be less than 300");
const response: SuccessResponseI = {
status,
data,
message,
};
res.status(code).send(response);
}