fylgja/src/services/sigma/utils/search_validation_utils.js

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
};