express-ts-skeleton
Version:
This is a skeleton(boiler plate) for nodejs, express and typescript.
137 lines (136 loc) • 5.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FailureResponse = exports.SuccessResponse = void 0;
/* eslint-disable @typescript-eslint/no-explicit-any */
const http_status_codes_1 = require("http-status-codes");
//#MARK: SuccessResponse
class SuccessResponse {
/**
* Returns a success response with a provided message.
* @param {string} [message="Success"] - The response message.
* @returns {ResponseFormat<null>} The formatted success response.
*/
static success(message = "Success") {
const res = {
isSuccess: true,
statusCode: http_status_codes_1.StatusCodes.OK,
message,
};
return res;
}
/**
* Returns a formatted response with the provided data.
* @param {T} data - The data to include in the response.
* @param {string} [message="Success"] - The response message.
* @returns {ResponseFormat<T>} The formatted response.
*/
static data(data, message = "Success", metaData) {
const res = {
isSuccess: true,
statusCode: http_status_codes_1.StatusCodes.OK,
message,
data,
metaData,
};
return res;
}
/**
* Paginates a list of items and returns a formatted response.
* @param {T[]} items - The array of items to paginate.
* @param {number} [page=1] - The current page number.
* @param {number} [size=10] - The number of items per page.
* @param {number} [totalRecords=items.length] - The total number of records.
* @param {string} [message="Success"] - The response message.
* @returns {ResponseFormat} The paginated response.
*/
static paginate(items, page = 1, size = 10, totalRecords = items.length, metaData, message = "Success") {
const res = {
isSuccess: true,
statusCode: http_status_codes_1.StatusCodes.OK,
message,
data: {
items,
total: items.length,
page: +(page || 1),
size: +(items.length > size ? items.length : size),
totalRecords: +(totalRecords || items.length),
},
metaData,
};
return res;
}
/**
* Handles file download.
* @param {string} data.filePath - The path to the file.
* @param {string} [data.fileName] - The name of the downloaded file. Defaults to the file name from `filePath`.
* @param {boolean} [willDelete=true] - Whether to delete the file after download.
* @param {number} [statusCode] - The HTTP response status code.
*/
static download(data, willDelete = true, metaData, statusCode = http_status_codes_1.StatusCodes.OK) {
const filePahtSplit = data.filePath.split("/");
const fileName = data.fileName || filePahtSplit[filePahtSplit.length - 1];
const res = {
filePath: data.filePath,
fileName,
metaData,
willDelete,
statusCode,
};
return res;
}
/**
* Renders an EJS template.
* @param {string} data.view - The name of the EJS template to render.
* @param {dynamicKeysI} data.content - Key-value pairs for replacing variables in the EJS template.
* @param {dynamicKeysI} [data.metaData] - Headers to set in the response.
*/
static render(data, statusCode = http_status_codes_1.StatusCodes.OK) {
const res = {
view: data.view,
content: data.content,
metaData: data.metaData,
statusCode,
};
return res;
}
}
exports.SuccessResponse = SuccessResponse;
//#MARK: FailureResponse
class FailureResponse {
/**
* Returns a failure response with the provided error details.
* @param {number} [params.statusCode=400] - The HTTP status code.
* @param {string} [params.message="Unknown error"] - The error message.
* @param {any} [params.validation] - Validation details, if any.
* @param {any} [params.error] - The error object or message.
* @returns {ResponseFormat} The formatted failure response.
*/
static failure({ message = "Unknown error", error, validation, statusCode = http_status_codes_1.StatusCodes.BAD_REQUEST, metaData, }) {
const res = {
isSuccess: false,
statusCode,
message,
validation,
error: error || "SERVER ERROR",
metaData,
};
return res;
}
/**
* Returns an unauthorized access response with the provided error details.
* @param {any} error - The error object or message.
* @param {number} [statusCode=401] - The HTTP status code.
* @returns {ResponseFormat} The formatted unauthorized access response.
*/
static unauthorizedAccess({ message, error }, statusCode = http_status_codes_1.StatusCodes.UNAUTHORIZED, metaData) {
const res = {
isSuccess: false,
statusCode,
message: message || "UNAUTHORIZED ACCESS",
error: error || "SERVER ERROR",
metaData,
};
return res;
}
}
exports.FailureResponse = FailureResponse;