Initial commit - Church Music Database

This commit is contained in:
2026-01-27 18:04:50 -06:00
commit d367261867
336 changed files with 103545 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
/**
* 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,
};

View File

@@ -0,0 +1,33 @@
/**
* Standardized response handlers for API routes
*/
const success = (res, data = {}, statusCode = 200) => {
res.status(statusCode).json({
success: true,
...data,
});
};
const error = (res, message, statusCode = 500, additionalData = {}) => {
res.status(statusCode).json({
success: false,
message,
...additionalData,
});
};
const notFound = (res, resource = "Resource") => {
error(res, `${resource} not found`, 404);
};
const badRequest = (res, message) => {
error(res, message, 400);
};
module.exports = {
success,
error,
notFound,
badRequest,
};