Files
cod-api/helpers/utils.js

91 lines
2.4 KiB
JavaScript

const setResponse = (data = null, message = "success", statusCode = 200) => {
const total = Array.isArray(data) ? data.length : null;
return {
message,
statusCode,
rows: total,
data,
};
};
const setResponsePaging = async (queryParam, data = [], message = "success", statusCode = 200) => {
const totalPages = Math.ceil(data?.total / Number(queryParam.limit ?? 0));
const response = {
message,
statusCode,
rows: data?.data?.length,
paging: {
current_limit: Number(queryParam.limit ?? 0),
current_page: Number(queryParam.page ?? 0),
total_limit: data?.total,
total_page: totalPages
},
data: data?.data ?? []
}
return response
};
function convertId(items, id, fieldId = "id", fieldName = "name") {
var match = ""
items.forEach(element => {
if (element[fieldId] == id) {
match = element[fieldName]
}
});
return match
}
function formatToYYYYMMDD(date) {
return new Intl.DateTimeFormat('id-ID', {
timeZone: 'Asia/Jakarta',
year: 'numeric',
month: '2-digit',
day: '2-digit',
}).format(date).split('/').reverse().join('-'); // Ubah format dari dd/mm/yyyy ke yyyy-mm-dd
}
function ensureArray(param) {
return Array.isArray(param) ? param : [param];
}
function orderByClauseQuery(orderParams) {
orderParams = ensureArray(orderParams)
// Transform order parameters to SQL ORDER BY syntax
const validDirections = ['ASC', 'DESC'];
const orderConditions = orderParams.map(param => {
const [field, direction] = param.split(':');
if (!validDirections.includes(direction.toUpperCase())) {
throw new Error(`Invalid direction: ${direction}`);
}
return `${field} ${direction}`;
});
// Gabungkan dengan koma untuk digunakan dalam query
const orderByClause = orderConditions.join(', ');
return orderByClause
}
const checkValidate = (validateSchema, req) => {
const { error, value } = validateSchema.validate(req.body || {}, { abortEarly: false });
if (error) {
const errors = error.details.reduce((acc, cur) => {
const field = Array.isArray(cur.path) ? cur.path.join('.') : String(cur.path);
if (!acc[field]) acc[field] = [];
acc[field].push(cur.message);
return acc;
}, {});
return { error: errors, value }
}
return { error, value }
}
module.exports = { setResponse, setResponsePaging, convertId, formatToYYYYMMDD, orderByClauseQuery, checkValidate };