47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
/**
|
|
* SQL Query Builder Utilities
|
|
*/
|
|
|
|
/**
|
|
* Build dynamic WHERE clause from conditions
|
|
* @param {Array} conditions - Array of SQL conditions
|
|
* @returns {string} WHERE clause or empty string
|
|
*/
|
|
const buildWhereClause = (conditions) => {
|
|
return conditions.length > 0 ? ` WHERE ${conditions.join(" AND ")}` : "";
|
|
};
|
|
|
|
/**
|
|
* Build LIMIT/OFFSET clause
|
|
* @param {number} limit - Max results
|
|
* @param {number} offset - Results to skip
|
|
* @param {number} paramOffset - Current parameter index
|
|
* @returns {Object} { clause, params }
|
|
*/
|
|
const buildPagination = (limit, offset, paramOffset = 1) => {
|
|
return {
|
|
clause: ` LIMIT $${paramOffset} OFFSET $${paramOffset + 1}`,
|
|
params: [parseInt(limit) || 100, parseInt(offset) || 0],
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Build search condition for multiple fields
|
|
* @param {string} searchTerm - Search term
|
|
* @param {Array} fields - Fields to search in
|
|
* @param {number} paramIndex - Parameter index
|
|
* @returns {string} SQL condition
|
|
*/
|
|
const buildSearchCondition = (searchTerm, fields, paramIndex) => {
|
|
const conditions = fields.map(
|
|
(field) => `LOWER(${field}) LIKE $${paramIndex}`,
|
|
);
|
|
return `(${conditions.join(" OR ")})`;
|
|
};
|
|
|
|
module.exports = {
|
|
buildWhereClause,
|
|
buildPagination,
|
|
buildSearchCondition,
|
|
};
|