diff --git a/test/test-cases/api-sync-mode-sqlite-test-cases.js b/test/test-cases/api-sync-mode-sqlite-test-cases.js index d41baded..fc7e55f7 100644 --- a/test/test-cases/api-sync-mode-sqlite-test-cases.js +++ b/test/test-cases/api-sync-mode-sqlite-test-cases.js @@ -1458,6 +1458,37 @@ module.exports = ( }) }) + it('it should be successfully performed by the getLedgers method filtered by wallet', async function () { + this.timeout(5000) + + const res = await agent + .post(`${basePath}/json-rpc`) + .type('json') + .send({ + auth, + method: 'getLedgers', + params: { + wallet: 'exchange', + start: 0, + end, + limit: 2 + }, + id: 5 + }) + .expect('Content-Type', /json/) + .expect(200) + + assert.isObject(res.body) + assert.propertyVal(res.body, 'id', 5) + assert.isObject(res.body.result) + assert.isArray(res.body.result.res) + + for (const resItem of res.body.result.res) { + assert.isObject(resItem) + assert.deepEqual(resItem.wallet, 'exchange') + } + }) + it('it should be successfully performed by the getLedgers method, without params', async function () { this.timeout(5000) diff --git a/workers/loc.api/sync/dao/helpers/find-in-coll-by/get-filter-params.js b/workers/loc.api/sync/dao/helpers/find-in-coll-by/get-filter-params.js index d81ca194..c3fb2ecd 100644 --- a/workers/loc.api/sync/dao/helpers/find-in-coll-by/get-filter-params.js +++ b/workers/loc.api/sync/dao/helpers/find-in-coll-by/get-filter-params.js @@ -10,43 +10,51 @@ const getInsertableArrayObjectsFilter = require( const getStatusMessagesFilter = require( '../get-status-messages-filter' ) -const TABLES_NAMES = require('../../../schema/tables-names') +const getLedgersFilter = require( + '../get-ledgers-filter' +) +const SUPPORTED_MODEL_FIELDS = require( + '../../../schema/sync-schema/model/supported.model.fields' +) module.exports = (args, methodColl, opts) => { - const { auth, params } = { ...args } - const { filter: requestedFilter } = { ...params } - const { isPublic } = { ...opts } + const { auth, params } = args ?? {} + const { filter: requestedFilter } = params ?? {} + const { isPublic } = opts ?? {} const statusMessagesfilter = getStatusMessagesFilter( methodColl, - params + args ) const insertableArrayObjectsFilter = getInsertableArrayObjectsFilter( methodColl, - params + args + ) + const ledgersFilter = getLedgersFilter( + methodColl, + args ) const filter = { ...insertableArrayObjectsFilter, - ...statusMessagesfilter + ...statusMessagesfilter, + ...ledgersFilter, + ...methodColl[SUPPORTED_MODEL_FIELDS.ADDITIONAL_FILTERING_PROPS] } - if (!isPublic) { - const { _id, isSubAccount } = { ...auth } - - if (!Number.isInteger(_id)) { - throw new AuthError() - } - if ( - methodColl.getModelField('NAME') === TABLES_NAMES.LEDGERS && - isSubAccount - ) { - filter._isBalanceRecalced = 1 + if (isPublic) { + return { + requestedFilter, + filter } + } - filter.user_id = _id + if (!Number.isInteger(auth?._id)) { + throw new AuthError() } + filter.user_id = auth._id + return { requestedFilter, filter diff --git a/workers/loc.api/sync/dao/helpers/get-insertable-array-objects-filter.js b/workers/loc.api/sync/dao/helpers/get-insertable-array-objects-filter.js index 58d4e945..0c55a202 100644 --- a/workers/loc.api/sync/dao/helpers/get-insertable-array-objects-filter.js +++ b/workers/loc.api/sync/dao/helpers/get-insertable-array-objects-filter.js @@ -41,10 +41,9 @@ module.exports = ( dateFieldName, model, symbolFieldName, - timeframeFieldName, - additionalFilteringProps + timeframeFieldName } = {}, - params = {} + args ) => { if (!isInsertableArrObj(type)) { return {} @@ -56,17 +55,16 @@ module.exports = ( symbol, timeframe, filter: reqFilter = {} - } = { ...params } + } = args?.params ?? {} const symbFilter = getSymbolFilter(symbol, symbolFieldName) const timeframeFilter = getTimeframeFilter(timeframe, timeframeFieldName) const fieldsFilters = getFieldsFilters( [ 'isMarginFundingPayment', 'isAffiliateRebate', - 'isStakingPayments', - 'category' + 'isStakingPayments' ], - params, + args?.params, model ) const filter = { @@ -74,7 +72,6 @@ module.exports = ( _dateFieldName: dateFieldName, start, end, - ...additionalFilteringProps, ...symbFilter, ...timeframeFilter, ...fieldsFilters diff --git a/workers/loc.api/sync/dao/helpers/get-ledgers-filter.js b/workers/loc.api/sync/dao/helpers/get-ledgers-filter.js new file mode 100644 index 00000000..519d4cba --- /dev/null +++ b/workers/loc.api/sync/dao/helpers/get-ledgers-filter.js @@ -0,0 +1,27 @@ +'use strict' + +const TABLES_NAMES = require('../../schema/tables-names') + +module.exports = ( + methodColl, + args +) => { + if (methodColl.getModelField('NAME') !== TABLES_NAMES.LEDGERS) { + return {} + } + + const { auth, params } = args ?? {} + const filter = {} + + if (auth?.isSubAccount) { + filter._isBalanceRecalced = 1 + } + if (params?.wallet) { + filter.wallet = params.wallet + } + if (params?.category) { + filter._category = params.category + } + + return filter +} diff --git a/workers/loc.api/sync/dao/helpers/get-status-messages-filter.js b/workers/loc.api/sync/dao/helpers/get-status-messages-filter.js index 6f4e2927..e4c11f24 100644 --- a/workers/loc.api/sync/dao/helpers/get-status-messages-filter.js +++ b/workers/loc.api/sync/dao/helpers/get-status-messages-filter.js @@ -6,10 +6,9 @@ const getSymbolFilter = require('./get-symbol-filter') module.exports = ( { name, - symbolFieldName, - additionalFilteringProps + symbolFieldName } = {}, - params = {} + args ) => { if (name !== TABLES_NAMES.STATUS_MESSAGES) { return {} @@ -19,12 +18,11 @@ module.exports = ( type, symbol, filter: reqFilter = {} - } = { ...params } + } = args?.params ?? {} const symbFilter = getSymbolFilter(symbol, symbolFieldName) const filter = { ...reqFilter, _type: type, - ...additionalFilteringProps, ...symbFilter }