Skip to content

Commit ad89c1f

Browse files
authored
Feature/#454 investigate settlements api failure (#33)
* fixed few bugs found. try-catch and log all the things. coverage maxed out.
1 parent 9de4f3f commit ad89c1f

25 files changed

Lines changed: 400 additions & 124 deletions

File tree

‎src/domain/settlement/index.js‎

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535

3636
const SettlementModel = require('../../models/settlement')
3737
const SettlementWindowModel = require('../../models/settlementWindow')
38-
const CentralLogger = require('@mojaloop/central-services-shared').Logger
3938

4039
const prepareParticipantsResult = function (participantCurrenciesList) {
4140
try {
@@ -67,14 +66,12 @@ const prepareParticipantsResult = function (participantCurrenciesList) {
6766
}
6867
return Array.from(Object.keys(participantAccounts).map(participantId => participantAccounts[participantId]))
6968
} catch (e) {
70-
CentralLogger.info(e)
7169
throw e
7270
}
7371
}
7472

7573
module.exports = {
7674
getById: async function ({ settlementId }, enums, options = {}) {
77-
let Logger = options.logger || CentralLogger
7875
try {
7976
let settlement = await SettlementModel.getById({ settlementId }, enums)
8077
if (settlement) {
@@ -89,11 +86,9 @@ module.exports = {
8986
}
9087
} else {
9188
let err = new Error('2001 TODO Settlement not found')
92-
Logger.info('error', err)
9389
throw err
9490
}
9591
} catch (err) {
96-
Logger.info('error', err)
9792
throw err
9893
}
9994
},
@@ -102,7 +97,6 @@ module.exports = {
10297

10398
getSettlementsByParams: async function (params, enums, options = {}) {
10499
// 7 filters - at least one should be used
105-
let Logger = options.logger || CentralLogger
106100
Object.keys(params.query).forEach(key => params.query[key] === undefined && delete params.query[key])
107101
if (Object.keys(params.query).length && Object.keys(params.query).length < 10) {
108102
try {
@@ -175,24 +169,20 @@ module.exports = {
175169
return result
176170
} else {
177171
let err = new Error('Settlements not found')
178-
Logger.info('error', err)
179172
throw err
180173
}
181174
} catch (err) {
182-
Logger.info('error', err)
183175
throw err
184176
}
185177
} else {
186178
let err = new Error('Use at least one parameter: state, fromDateTime, toDateTime, currency, settlementWindowId, fromSettlementWindowDateTime, toSettlementWindowDateTime, participantId, accountId')
187-
Logger.info('error', err)
188179
throw err
189180
}
190181
},
191182

192183
settlementEventTrigger: async function (params, enums, options = {}) {
193184
let settlementWindowsIdList = params.settlementWindows
194185
let reason = params.reason
195-
let Logger = options.logger || CentralLogger
196186
try {
197187
let idList = settlementWindowsIdList.map(v => v.id)
198188
// validate windows state
@@ -221,13 +211,11 @@ module.exports = {
221211
participants
222212
}
223213
} catch (err) {
224-
Logger.info('error', err)
225214
throw err
226215
}
227216
},
228217

229218
getByIdParticipantAccount: async function ({ settlementId, participantId, accountId = null }, enums, options = {}) {
230-
let Logger = options.logger || CentralLogger
231219
try {
232220
let settlement = await SettlementModel.getById({ settlementId }, enums) // 3
233221
let settlementParticipantCurrencyIdList = await SettlementModel.settlementParticipantCurrency.getAccountsInSettlementByIds({
@@ -242,18 +230,18 @@ module.exports = {
242230
participantId,
243231
accountId
244232
}, enums) // 9
245-
let settlementParticipantCurrencyId
233+
let settlementParticipantCurrencyList
246234
if (participantAndAccountMatched) {
247-
settlementParticipantCurrencyId = await SettlementModel.getAccountInSettlement({
235+
settlementParticipantCurrencyList = await SettlementModel.getAccountInSettlement({
248236
settlementId,
249237
accountId
250238
}, enums) // 12
251-
if (settlementParticipantCurrencyId) {
239+
if (settlementParticipantCurrencyList) {
252240
settlementWindows = await SettlementModel.settlementSettlementWindow.getWindowsBySettlementIdAndAccountId({
253241
settlementId,
254242
accountId
255243
}, enums)
256-
accounts = await SettlementModel.settlementParticipantCurrency.getAccountById({ settlementParticipantCurrencyId }, enums)
244+
accounts = await SettlementModel.settlementParticipantCurrency.getAccountById({ settlementParticipantCurrencyList }, enums)
257245
participants = prepareParticipantsResult(accounts)
258246
} else {
259247
throw new Error('TODO')
@@ -276,7 +264,6 @@ module.exports = {
276264
participants
277265
}
278266
} catch (err) {
279-
Logger.info('error', err)
280267
throw err
281268
}
282269
}

‎src/domain/settlementWindow/index.js‎

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,56 +27,47 @@
2727
******/
2828

2929
const settlementWindowModel = require('../../models/settlementWindow')
30-
const centralLogger = require('@mojaloop/central-services-shared').Logger
30+
const hasFilters = require('./../../utils/truthyProperty')
3131

3232
module.exports = {
33-
getById: async function (params, enums, options = {}) {
34-
let Logger = options.logger || centralLogger
33+
getById: async function (params, enums) {
3534
try {
3635
let settlementWindow = await settlementWindowModel.getById(params, enums)
3736
if (settlementWindow) return settlementWindow
3837
else {
39-
let err = new Error('Settlement Window Not Found')
40-
Logger.info('error', err)
38+
let err = new Error(`settlementWindowId: ${params.settlementWindowId} not found`)
4139
throw err
4240
}
4341
} catch (err) {
44-
Logger.info('error', err)
4542
throw err
4643
}
4744
},
4845

4946
getByParams: async function (params, enums, options = {}) {
5047
// 4 filters - at least one should be used
51-
let Logger = options.logger || centralLogger
52-
if (Object.keys(params.query).length && Object.keys(params.query).length < 5) {
48+
if (hasFilters(params.query) && Object.keys(params.query).length < 5) {
5349
try {
5450
let settlementWindows = await settlementWindowModel.getByParams(params, enums)
5551
if (settlementWindows && settlementWindows.length > 0) {
5652
return settlementWindows
5753
} else {
58-
let err = new Error('Settlement Window Not Found')
59-
Logger.info('error', err)
54+
let err = new Error(`settlementWindow by filters: ${JSON.stringify(params.query)} not found`)
6055
throw err
6156
}
6257
} catch (err) {
63-
Logger.info('error', err)
6458
throw err
6559
}
6660
} else {
6761
let err = new Error('Use at least one parameter: participantId, state, fromDateTime, toDateTime')
68-
Logger.info('error', err)
6962
throw err
7063
}
7164
},
7265

7366
close: async function (params, enums, options = {}) {
74-
let Logger = options.logger || centralLogger
7567
try {
7668
let settlementWindowId = await settlementWindowModel.close(params, enums)
7769
return await settlementWindowModel.getById({ settlementWindowId }, enums)
7870
} catch (err) {
79-
Logger.info('error', err)
8071
throw err
8172
}
8273
}

‎src/handlers/settlementWindows.js‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ const Boom = require('boom')
3535
const Logger = require('@mojaloop/central-services-shared').Logger
3636
const Path = require('path')
3737
const settlementWindows = require('./../domain/settlementWindow')
38-
3938
Logger.info('path ', Path.basename(__filename))
4039

4140
/**
@@ -52,7 +51,7 @@ module.exports = {
5251
get: async function getSettlementWindowsByParams (request, h) {
5352
try {
5453
const Enums = await request.server.methods.enums('settlementWindowStates')
55-
let settlementWindowResult = await settlementWindows.getByParams({ query: request.query }, Enums, { logger: request.server.log })
54+
let settlementWindowResult = await settlementWindows.getByParams({ query: request.query }, Enums)
5655
return h.response(settlementWindowResult)
5756
} catch (e) {
5857
request.server.log('error', e)

‎src/handlers/settlementWindows/{id}.js‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,13 @@ module.exports = {
4848
* responses: 200, 400, 401, 404, 415, default
4949
*/
5050
get: async function getSettlementWindowById (request, h) {
51-
const Enums = await request.server.methods.enums('settlementWindowStates')
5251
const settlementWindowId = request.params.id
5352
try {
54-
request.server.log('info', `get settlementwindow by Id requested with id ${settlementWindowId}`)
55-
let settlementWindowResult = await settlementWindow.getById({ settlementWindowId }, Enums, { logger: request.server.log })
53+
const Enums = await request.server.methods.enums('settlementWindowStates')
54+
let settlementWindowResult = await settlementWindow.getById({ settlementWindowId }, Enums, request.server.log)
5655
return h.response(settlementWindowResult)
5756
} catch (e) {
58-
request.server.log('error', `ERROR settlementWindowId: ${settlementWindowId} not found`)
57+
request.server.log('error', e)
5958
return Boom.notFound(e.message)
6059
}
6160
},
@@ -69,11 +68,12 @@ module.exports = {
6968
post: async function closeSettlementWindow (request, h) {
7069
const { state, reason } = request.payload
7170
const settlementWindowId = request.params.id
72-
const Enums = await request.server.methods.enums('settlementWindowStates')
7371
try {
74-
return await settlementWindow.close({ settlementWindowId, state, reason }, Enums, { logger: request.server.log })
72+
const Enums = await request.server.methods.enums('settlementWindowStates')
73+
return await settlementWindow.close({ settlementWindowId, state, reason }, Enums)
7574
} catch (e) {
76-
throw (Boom.boomify(e))
75+
request.server.log('error', e)
76+
return Boom.badRequest(e.message)
7777
}
7878
}
7979
}

‎src/handlers/settlements.js‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,11 @@ module.exports = {
5252
* responses: 200, 400, 401, 404, 415, default
5353
*/
5454
get: async function getSettlementsByParams (request, h) {
55-
Logger.info('Here')
5655
try {
5756
const Enums = await request.server.methods.enums('settlementStates')
58-
let settlementResult = await Settlements.getSettlementsByParams({ query: request.query }, Enums, { logger: request.server.log })
57+
let settlementResult = await Settlements.getSettlementsByParams({ query: request.query }, Enums)
5958
return h.response(settlementResult)
6059
} catch (e) {
61-
Logger.info('error', e)
6260
request.server.log('error', e)
6361
return Boom.notFound(e.message)
6462
}
@@ -72,19 +70,18 @@ module.exports = {
7270
*/
7371
post: async function createSettlementEvent (request, h) {
7472
try {
75-
// TODO
7673
const Enums = {
7774
settlementStates: await request.server.methods.enums('settlementStates'),
7875
settlementWindowStates: await request.server.methods.enums('settlementWindowStates'),
7976
transferStates: await request.server.methods.enums('transferStates'),
8077
transferParticipantRoleTypes: await request.server.methods.enums('transferParticipantRoleTypes'),
8178
ledgerEntryTypes: await request.server.methods.enums('ledgerEntryTypes')
8279
}
83-
let settlementResult = await Settlements.settlementEventTrigger(request.payload, Enums, { logger: request.server.log })
80+
let settlementResult = await Settlements.settlementEventTrigger(request.payload, Enums)
8481
return h.response(settlementResult)
8582
} catch (e) {
8683
request.server.log('error', e)
87-
return Boom.notFound(e.message)
84+
return Boom.badRequest(e.message)
8885
}
8986
}
9087
}

‎src/handlers/settlements/{id}.js‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ module.exports = {
5353
* responses: 200, 400, 401, 404, 415, default
5454
*/
5555
get: async function getSettlementById (request, h) {
56-
const Enums = await request.server.methods.enums('settlementStates')
5756
const settlementId = request.params.id
5857
try {
58+
const Enums = await request.server.methods.enums('settlementStates')
5959
request.server.log('info', `get settlement by Id requested with id ${settlementId}`)
60-
let settlementResult = await settlement.getById({ settlementId }, Enums, { logger: request.server.log })
60+
let settlementResult = await settlement.getById({ settlementId }, Enums)
6161
return h.response(settlementResult)
6262
} catch (e) {
63-
request.server.log('error', `ERROR settlementWindowId: ${settlementId} not found`)
63+
request.server.log('error', e)
6464
return Boom.notFound(e.message)
6565
}
6666
},
@@ -74,11 +74,12 @@ module.exports = {
7474

7575
put: async function updateSettlementById (request, h) {
7676
const settlementId = request.params.id
77-
const Enums = await request.server.methods.enums('settlementStates')
7877
try {
79-
return await settlement.putById(settlementId, request.payload, Enums, { logger: request.server.log })
78+
const Enums = await request.server.methods.enums('settlementStates')
79+
return await settlement.putById(settlementId, request.payload, Enums)
8080
} catch (e) {
81-
throw (Boom.boomify(e))
81+
request.server.log('error', e)
82+
return Boom.badRequest(e)
8283
}
8384
}
8485
}

‎src/handlers/settlements/{settlementId}/participants/{participantId}/accounts/{accountId}.js‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ module.exports = {
3939
*/
4040

4141
get: async function getSettlementBySettlementParticipantAccount (request, h) {
42-
const Enums = await request.server.methods.enums('settlementWindowStates')
43-
const { settlementId, participantId, accountId } = request.params
4442
try {
45-
let result = await Settlements.getByIdParticipantAccount({ settlementId, participantId, accountId }, Enums, { logger: request.server.log })
43+
const Enums = await request.server.methods.enums('settlementWindowStates')
44+
const { settlementId, participantId, accountId } = request.params
45+
let result = await Settlements.getByIdParticipantAccount({ settlementId, participantId, accountId }, Enums)
4646
return h.response(result)
4747
} catch (e) {
48-
return Boom.boomify(e)
48+
request.server.log('error', e)
49+
return Boom.badRequest(e)
4950
}
5051
}
5152
/**

‎src/models/settlement/facade.js‎

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -621,8 +621,11 @@ const Facade = {
621621
}
622622
},
623623

624-
getAccountById: async function ({ settlementParticipantCurrencyId }, enums = {}) {
624+
getAccountById: async function ({ settlementParticipantCurrencyList }, enums = {}) {
625625
try {
626+
let settlementParticipantCurrencyIdList = settlementParticipantCurrencyList.map(a => {
627+
return a.settlementParticipantCurrencyId
628+
})
626629
let result = await Db.settlementParticipantCurrency.query(builder => {
627630
return builder
628631
.join('settlementParticipantCurrencyStateChange AS spcsc', 'spcsc.settlementParticipantCurrencyStateChangeId', 'settlementParticipantCurrency.currentStateChangeId')
@@ -635,7 +638,7 @@ const Facade = {
635638
'settlementParticipantCurrency.netAmount as netAmount',
636639
'pc.currencyId AS currency'
637640
)
638-
.where({ settlementParticipantCurrencyId })
641+
.whereIn('settlementParticipantCurrency.settlementParticipantCurrencyId', settlementParticipantCurrencyIdList)
639642
})
640643
return result
641644
} catch (err) {
@@ -670,10 +673,10 @@ const Facade = {
670673
try {
671674
let result = await Db.settlementSettlementWindow.query(builder => {
672675
return builder
673-
.join('settlementWindow AS sw', 'sw.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
676+
.join('settlementWindow', 'settlementWindow.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
674677
.join('settlementWindowStateChange AS swsc', 'swsc.settlementWindowStateChangeId', 'settlementWindow.currentStateChangeId')
675678
.join('settlementTransferParticipant AS stp', function () {
676-
this.on('stp.settlementWindowId', 'sw.settlementWindowId')
679+
this.on('stp.settlementWindowId', 'settlementWindow.settlementWindowId')
677680
.on('stp.participantCurrencyId', accountId)
678681
})
679682
.distinct(
@@ -684,7 +687,7 @@ const Facade = {
684687
'swsc.createdDate as changedDate'
685688
)
686689
.select()
687-
.where({ settlementId })
690+
.where('settlementSettlementWindow.settlementId', settlementId)
688691
})
689692
return result
690693
} catch (err) {
@@ -695,10 +698,10 @@ const Facade = {
695698
try {
696699
let result = await Db.settlementSettlementWindow.query(builder => {
697700
return builder
698-
.join('settlementWindow AS sw', 'sw.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
701+
.join('settlementWindow', 'settlementWindow.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
699702
.join('settlementWindowStateChange AS swsc', 'swsc.settlementWindowStateChangeId', 'settlementWindow.currentStateChangeId')
700703
.join('settlementTransferParticipant AS stp', async function () {
701-
this.on('stp.settlementWindowId', 'sw.settlementWindowId')
704+
this.on('stp.settlementWindowId', 'settlementWindow.settlementWindowId')
702705
.onIn('stp.participantCurrencyId', await Db.participantCurrency.find({ participantId }))
703706
})
704707
.distinct(
@@ -709,7 +712,7 @@ const Facade = {
709712
'swsc.createdDate as changedDate'
710713
)
711714
.select()
712-
.where({ settlementId })
715+
.where('settlementSettlementWindow.settlementId', settlementId)
713716
})
714717
return result
715718
} catch (err) {

‎src/models/settlement/settlementParticipantCurrency.js‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,9 @@ const Db = require('../index')
2929

3030
const getAccountInSettlement = async ({ settlementId, accountId }, enums = {}) => {
3131
try {
32-
let result = await Db.settlementParticipantCurrency.query(builder => {
33-
return builder
34-
.select('settlementParticipantCurrencyId')
35-
.where({ settlementId })
36-
.andWhere('settlementParticipantCurrencyId', accountId)
32+
let result = await Db.settlementParticipantCurrency.find({
33+
settlementId,
34+
settlementParticipantCurrencyId: accountId
3735
})
3836
return result
3937
} catch (err) {

0 commit comments

Comments
 (0)