You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.6 KiB

const defaultExcludedItemsFromResponse = ['__v', 'password'];
class HttpResponse {
/**
* @author Sunil Kumar Samanta
* @param data : Object | Array | String
* @param options : {totalCount: Number, statusCode: Number, deleted: Boolean}
*/
error = false;
responseTimestamp = new Date();
constructor(data, options = { 'totalCount': 0, 'statusCode': 200, 'deleted': null }) {
this.statusCode = options.statusCode || 200;
let filteredData = data;
if (typeof (filteredData) === 'object') {
filteredData = this.filterData(JSON.parse(JSON.stringify(filteredData)));
}
if (options.deleted) {
this.deleted = options.deleted;
}
if (Array.isArray(filteredData)) {
this.data = [...filteredData];
this.totalCount = options.totalCount || undefined;
} else if (typeof (filteredData) === 'object') {
this.data = { ...filteredData };
} else {
this.data = data;
}
}
filterData(data) {
if (Array.isArray(data)) {
data.map((x, index) => {
Object.keys(x).forEach((key) => {
if (defaultExcludedItemsFromResponse.includes(key)) {
delete data[index][key];
}
});
});
} else if (typeof (data) === 'object') {
Object.keys(data).forEach((key) => {
if (defaultExcludedItemsFromResponse.includes(key)) {
delete data[key];
}
});
}
return data;
}
}
module.exports = { HttpResponse };