From 1705b43fc82132d5330e01a94e99ac30dc167d0f Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 25 Aug 2025 13:00:46 +0300 Subject: [PATCH] Remove filter normalizer to speed up requests --- workers/loc.api/generate-report-file/index.js | 29 +---- workers/loc.api/helpers/index.js | 2 - .../helpers/normalize-filter-params.js | 100 ------------------ .../loc.api/helpers/prepare-response/index.js | 6 +- 4 files changed, 7 insertions(+), 130 deletions(-) delete mode 100644 workers/loc.api/helpers/normalize-filter-params.js diff --git a/workers/loc.api/generate-report-file/index.js b/workers/loc.api/generate-report-file/index.js index 3fdda07b..3952cc55 100644 --- a/workers/loc.api/generate-report-file/index.js +++ b/workers/loc.api/generate-report-file/index.js @@ -1,8 +1,7 @@ 'use strict' const { - FILTER_API_METHOD_NAMES, - normalizeFilterParams + FILTER_API_METHOD_NAMES } = require('../helpers') const { getFilterValidationSchemaId @@ -74,26 +73,12 @@ const _filterApiMethodNameMap = Object.values(FILTER_API_METHOD_NAMES) return map }, new Map()) -const _truncateFileNameEnding = (name) => { - if (!name) { - return name - } - - const cleanedName = name - .replace(/^get/i, '') - .replace(/(file)|(csv)$/i, '') - - return `${cleanedName[0].toLowerCase()}${cleanedName.slice(1)}` -} - const _getFilterApiMethodNamesAndArgs = ( name, - reqArgs + args ) => { if (name !== 'getMultipleFileJobData') { const filterApiMethodName = _filterApiMethodNameMap.get(name) - const truncatedName = _truncateFileNameEnding(name) - const args = normalizeFilterParams(truncatedName, reqArgs) return [{ filterApiMethodName, @@ -101,22 +86,18 @@ const _getFilterApiMethodNamesAndArgs = ( }] } - const { params } = { ...reqArgs } - const { multiExport } = { ...params } + const multiExport = args?.params?.multiExport ?? [] const _multiExport = Array.isArray(multiExport) ? multiExport : [] return _multiExport.map((params) => { - const { method } = { ...params } - const name = `${method}JobData` - const truncatedName = _truncateFileNameEnding(method) - const args = normalizeFilterParams(truncatedName, { params }) + const name = `${params?.method}JobData` const filterApiMethodName = _filterApiMethodNameMap.get(name) return { filterApiMethodName, - args + args: { params } } }) } diff --git a/workers/loc.api/helpers/index.js b/workers/loc.api/helpers/index.js index 499cdaf9..9d775494 100644 --- a/workers/loc.api/helpers/index.js +++ b/workers/loc.api/helpers/index.js @@ -58,7 +58,6 @@ const checkJobAndGetUserData = require( ) const grcBfxReq = require('./grc-bfx-req') const filterResponse = require('./filter-response') -const normalizeFilterParams = require('./normalize-filter-params') const FILTER_API_METHOD_NAMES = require('./filter.api.method.names') const FILTER_CONDITIONS = require('./filter.conditions') const getDataFromApi = require('./get-data-from-api') @@ -110,7 +109,6 @@ module.exports = { checkJobAndGetUserData, grcBfxReq, filterResponse, - normalizeFilterParams, FILTER_API_METHOD_NAMES, FILTER_CONDITIONS, getDataFromApi, diff --git a/workers/loc.api/helpers/normalize-filter-params.js b/workers/loc.api/helpers/normalize-filter-params.js deleted file mode 100644 index 451275e8..00000000 --- a/workers/loc.api/helpers/normalize-filter-params.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict' - -const { cloneDeep } = require('lib-js-util-base') - -const FILTER_API_METHOD_NAMES = require('./filter.api.method.names') -const FILTER_CONDITIONS = require('./filter.conditions') - -const _filterConditionsNames = Object - .values(FILTER_CONDITIONS) - -const _isCondition = (propName) => { - return _filterConditionsNames.some((name) => { - return propName === name - }) -} - -const _normalizeProp = ( - filter, - propName, - propHandler = () => {}, - prevLevel = 0 -) => { - const level = prevLevel + 1 - - if (level > 3) { - return filter - } - - const filterKeys = Object.entries(filter) - - for (const [name, val] of filterKeys) { - if ( - name !== propName && - !_isCondition(name) - ) { - continue - } - if ( - val && - typeof val === 'object' && - !Array.isArray(val) - ) { - _normalizeProp( - val, - propName, - propHandler, - level - ) - - continue - } - if (name === propName) { - filter[name] = propHandler(val) - } - } - - return filter -} - -const _normalizers = { - [FILTER_API_METHOD_NAMES.PUBLIC_TRADES] (filter) { - return _normalizeProp(filter, 'rate', (val) => { - return typeof val === 'string' - ? Number.parseFloat(val) - : val - }) - } -} - -module.exports = ( - methodApi, - args = {} -) => { - const { params } = { ...args } - const { filter } = { ...params } - - if ( - !methodApi || - typeof methodApi !== 'string' || - !filter || - typeof filter !== 'object' || - Array.isArray(filter) || - Object.keys(filter).length === 0 - ) { - return args - } - - const normalizer = _normalizers[methodApi] - const normFilter = typeof normalizer === 'function' - ? normalizer(cloneDeep(filter)) - : filter - - return { - ...args, - params: { - ...params, - filter: normFilter - } - } -} diff --git a/workers/loc.api/helpers/prepare-response/index.js b/workers/loc.api/helpers/prepare-response/index.js index 2c6e6573..1c4a8195 100644 --- a/workers/loc.api/helpers/prepare-response/index.js +++ b/workers/loc.api/helpers/prepare-response/index.js @@ -3,7 +3,6 @@ const { MinLimitParamError } = require('../../errors') const filterResponse = require('../filter-response') -const normalizeFilterParams = require('../normalize-filter-params') const prepareSymbolResponse = require('./prepare-symbol-response') @@ -130,7 +129,7 @@ const prepareApiResponse = ( getREST, dataValidator ) => async ( - reqArgs, + args, apiMethodName, params = {} ) => { @@ -143,8 +142,7 @@ const prepareApiResponse = ( const schemaId = getValidationSchemaId(apiMethodName) const filterSchemaId = getFilterValidationSchemaId(apiMethodName) - await dataValidator.validate(reqArgs, schemaId) - const args = normalizeFilterParams(apiMethodName, reqArgs) + await dataValidator.validate(args, schemaId) await dataValidator.validate( { params: args?.params?.filter }, filterSchemaId