91 lines
2.4 KiB
JavaScript
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 };
|