105 lines
No EOL
2.9 KiB
JavaScript
105 lines
No EOL
2.9 KiB
JavaScript
/**
|
|
* search_validation_utils.js
|
|
*
|
|
* Utility functions for validating search parameters
|
|
*/
|
|
const logger = require('../../../utils/logger');
|
|
const { getFileName } = require('../../../utils/file_utils');
|
|
const FILE_NAME = getFileName(__filename);
|
|
|
|
/**
|
|
* Validates a search keyword
|
|
* @param {string} keyword - The keyword to validate
|
|
* @returns {Object} Validation result object
|
|
*/
|
|
function validateKeyword(keyword) {
|
|
if (!keyword || typeof keyword !== 'string') {
|
|
logger.warn(`${FILE_NAME}: Cannot search rules: Missing or invalid keyword`);
|
|
return {
|
|
isValid: false,
|
|
message: 'Missing or invalid search keyword'
|
|
};
|
|
}
|
|
|
|
const trimmedKeyword = keyword.trim();
|
|
if (trimmedKeyword.length === 0) {
|
|
logger.warn(`${FILE_NAME}: Cannot search rules: Empty keyword after trimming`);
|
|
return {
|
|
isValid: false,
|
|
message: 'Search keyword cannot be empty'
|
|
};
|
|
}
|
|
|
|
return {
|
|
isValid: true,
|
|
trimmedKeyword
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Validates query string for complex search
|
|
* @param {string} queryString - The query string to validate
|
|
* @returns {Object} Validation result object
|
|
*/
|
|
function validateQueryString(queryString) {
|
|
if (!queryString || typeof queryString !== 'string') {
|
|
logger.warn(`${FILE_NAME}: Cannot perform complex search: Missing or invalid query string`);
|
|
return {
|
|
isValid: false,
|
|
message: 'Missing or invalid complex query'
|
|
};
|
|
}
|
|
|
|
const trimmedQuery = queryString.trim();
|
|
if (trimmedQuery.length === 0) {
|
|
logger.warn(`${FILE_NAME}: Cannot perform complex search: Empty query after trimming`);
|
|
return {
|
|
isValid: false,
|
|
message: 'Complex query cannot be empty'
|
|
};
|
|
}
|
|
|
|
return {
|
|
isValid: true,
|
|
trimmedQuery
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Validates pagination parameters
|
|
* @param {number} page - Page number (1-based)
|
|
* @param {number} pageSize - Number of results per page
|
|
* @param {number} maxPageSize - Maximum allowed page size
|
|
* @returns {Object} Validated pagination parameters
|
|
*/
|
|
function validatePagination(page = 1, pageSize = 10, maxPageSize = 100) {
|
|
let validatedPage = page;
|
|
let validatedPageSize = pageSize;
|
|
|
|
if (typeof validatedPage !== 'number' || validatedPage < 1) {
|
|
logger.warn(`${FILE_NAME}: Invalid page number: ${page}, defaulting to 1`);
|
|
validatedPage = 1;
|
|
}
|
|
|
|
if (typeof validatedPageSize !== 'number' || validatedPageSize < 1) {
|
|
logger.warn(`${FILE_NAME}: Invalid page size: ${pageSize}, defaulting to 10`);
|
|
validatedPageSize = 10;
|
|
} else if (validatedPageSize > maxPageSize) {
|
|
logger.warn(`${FILE_NAME}: Page size ${pageSize} exceeds max ${maxPageSize}, limiting to ${maxPageSize}`);
|
|
validatedPageSize = maxPageSize;
|
|
}
|
|
|
|
const offset = (validatedPage - 1) * validatedPageSize;
|
|
|
|
return {
|
|
page: validatedPage,
|
|
pageSize: validatedPageSize,
|
|
offset
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
validateKeyword,
|
|
validateQueryString,
|
|
validatePagination
|
|
}; |