Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 4 additions & 17 deletions src/domain/settlement/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@

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

const prepareParticipantsResult = function (participantCurrenciesList) {
try {
Expand Down Expand Up @@ -67,14 +66,12 @@ const prepareParticipantsResult = function (participantCurrenciesList) {
}
return Array.from(Object.keys(participantAccounts).map(participantId => participantAccounts[participantId]))
} catch (e) {
CentralLogger.info(e)
throw e
}
}

module.exports = {
getById: async function ({ settlementId }, enums, options = {}) {
let Logger = options.logger || CentralLogger
try {
let settlement = await SettlementModel.getById({ settlementId }, enums)
if (settlement) {
Expand All @@ -89,11 +86,9 @@ module.exports = {
}
} else {
let err = new Error('2001 TODO Settlement not found')
Logger.info('error', err)
throw err
}
} catch (err) {
Logger.info('error', err)
throw err
}
},
Expand All @@ -102,7 +97,6 @@ module.exports = {

getSettlementsByParams: async function (params, enums, options = {}) {
// 7 filters - at least one should be used
let Logger = options.logger || CentralLogger
Object.keys(params.query).forEach(key => params.query[key] === undefined && delete params.query[key])
if (Object.keys(params.query).length && Object.keys(params.query).length < 10) {
try {
Expand Down Expand Up @@ -175,24 +169,20 @@ module.exports = {
return result
} else {
let err = new Error('Settlements not found')
Logger.info('error', err)
throw err
}
} catch (err) {
Logger.info('error', err)
throw err
}
} else {
let err = new Error('Use at least one parameter: state, fromDateTime, toDateTime, currency, settlementWindowId, fromSettlementWindowDateTime, toSettlementWindowDateTime, participantId, accountId')
Logger.info('error', err)
throw err
}
},

settlementEventTrigger: async function (params, enums, options = {}) {
let settlementWindowsIdList = params.settlementWindows
let reason = params.reason
let Logger = options.logger || CentralLogger
try {
let idList = settlementWindowsIdList.map(v => v.id)
// validate windows state
Expand Down Expand Up @@ -221,13 +211,11 @@ module.exports = {
participants
}
} catch (err) {
Logger.info('error', err)
throw err
}
},

getByIdParticipantAccount: async function ({ settlementId, participantId, accountId = null }, enums, options = {}) {
let Logger = options.logger || CentralLogger
try {
let settlement = await SettlementModel.getById({ settlementId }, enums) // 3
let settlementParticipantCurrencyIdList = await SettlementModel.settlementParticipantCurrency.getAccountsInSettlementByIds({
Expand All @@ -242,18 +230,18 @@ module.exports = {
participantId,
accountId
}, enums) // 9
let settlementParticipantCurrencyId
let settlementParticipantCurrencyList
if (participantAndAccountMatched) {
settlementParticipantCurrencyId = await SettlementModel.getAccountInSettlement({
settlementParticipantCurrencyList = await SettlementModel.getAccountInSettlement({
settlementId,
accountId
}, enums) // 12
if (settlementParticipantCurrencyId) {
if (settlementParticipantCurrencyList) {
settlementWindows = await SettlementModel.settlementSettlementWindow.getWindowsBySettlementIdAndAccountId({
settlementId,
accountId
}, enums)
accounts = await SettlementModel.settlementParticipantCurrency.getAccountById({ settlementParticipantCurrencyId }, enums)
accounts = await SettlementModel.settlementParticipantCurrency.getAccountById({ settlementParticipantCurrencyList }, enums)
participants = prepareParticipantsResult(accounts)
} else {
throw new Error('TODO')
Expand All @@ -276,7 +264,6 @@ module.exports = {
participants
}
} catch (err) {
Logger.info('error', err)
throw err
}
}
Expand Down
19 changes: 5 additions & 14 deletions src/domain/settlementWindow/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,56 +27,47 @@
******/

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

module.exports = {
getById: async function (params, enums, options = {}) {
let Logger = options.logger || centralLogger
getById: async function (params, enums) {
try {
let settlementWindow = await settlementWindowModel.getById(params, enums)
if (settlementWindow) return settlementWindow
else {
let err = new Error('Settlement Window Not Found')
Logger.info('error', err)
let err = new Error(`settlementWindowId: ${params.settlementWindowId} not found`)
throw err
}
} catch (err) {
Logger.info('error', err)
throw err
}
},

getByParams: async function (params, enums, options = {}) {
// 4 filters - at least one should be used
let Logger = options.logger || centralLogger
if (Object.keys(params.query).length && Object.keys(params.query).length < 5) {
if (hasFilters(params.query) && Object.keys(params.query).length < 5) {
try {
let settlementWindows = await settlementWindowModel.getByParams(params, enums)
if (settlementWindows && settlementWindows.length > 0) {
return settlementWindows
} else {
let err = new Error('Settlement Window Not Found')
Logger.info('error', err)
let err = new Error(`settlementWindow by filters: ${JSON.stringify(params.query)} not found`)
throw err
}
} catch (err) {
Logger.info('error', err)
throw err
}
} else {
let err = new Error('Use at least one parameter: participantId, state, fromDateTime, toDateTime')
Logger.info('error', err)
throw err
}
},

close: async function (params, enums, options = {}) {
let Logger = options.logger || centralLogger
try {
let settlementWindowId = await settlementWindowModel.close(params, enums)
return await settlementWindowModel.getById({ settlementWindowId }, enums)
} catch (err) {
Logger.info('error', err)
throw err
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/handlers/settlementWindows.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ const Boom = require('boom')
const Logger = require('@mojaloop/central-services-shared').Logger
const Path = require('path')
const settlementWindows = require('./../domain/settlementWindow')

Logger.info('path ', Path.basename(__filename))

/**
Expand All @@ -52,7 +51,7 @@ module.exports = {
get: async function getSettlementWindowsByParams (request, h) {
try {
const Enums = await request.server.methods.enums('settlementWindowStates')
let settlementWindowResult = await settlementWindows.getByParams({ query: request.query }, Enums, { logger: request.server.log })
let settlementWindowResult = await settlementWindows.getByParams({ query: request.query }, Enums)
return h.response(settlementWindowResult)
} catch (e) {
request.server.log('error', e)
Expand Down
14 changes: 7 additions & 7 deletions src/handlers/settlementWindows/{id}.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,13 @@ module.exports = {
* responses: 200, 400, 401, 404, 415, default
*/
get: async function getSettlementWindowById (request, h) {
const Enums = await request.server.methods.enums('settlementWindowStates')
const settlementWindowId = request.params.id
try {
request.server.log('info', `get settlementwindow by Id requested with id ${settlementWindowId}`)
let settlementWindowResult = await settlementWindow.getById({ settlementWindowId }, Enums, { logger: request.server.log })
const Enums = await request.server.methods.enums('settlementWindowStates')
let settlementWindowResult = await settlementWindow.getById({ settlementWindowId }, Enums, request.server.log)
return h.response(settlementWindowResult)
} catch (e) {
request.server.log('error', `ERROR settlementWindowId: ${settlementWindowId} not found`)
request.server.log('error', e)
return Boom.notFound(e.message)
}
},
Expand All @@ -69,11 +68,12 @@ module.exports = {
post: async function closeSettlementWindow (request, h) {
const { state, reason } = request.payload
const settlementWindowId = request.params.id
const Enums = await request.server.methods.enums('settlementWindowStates')
try {
return await settlementWindow.close({ settlementWindowId, state, reason }, Enums, { logger: request.server.log })
const Enums = await request.server.methods.enums('settlementWindowStates')
return await settlementWindow.close({ settlementWindowId, state, reason }, Enums)
} catch (e) {
throw (Boom.boomify(e))
request.server.log('error', e)
return Boom.badRequest(e.message)
}
}
}
9 changes: 3 additions & 6 deletions src/handlers/settlements.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,11 @@ module.exports = {
* responses: 200, 400, 401, 404, 415, default
*/
get: async function getSettlementsByParams (request, h) {
Logger.info('Here')
try {
const Enums = await request.server.methods.enums('settlementStates')
let settlementResult = await Settlements.getSettlementsByParams({ query: request.query }, Enums, { logger: request.server.log })
let settlementResult = await Settlements.getSettlementsByParams({ query: request.query }, Enums)
return h.response(settlementResult)
} catch (e) {
Logger.info('error', e)
request.server.log('error', e)
return Boom.notFound(e.message)
}
Expand All @@ -72,19 +70,18 @@ module.exports = {
*/
post: async function createSettlementEvent (request, h) {
try {
// TODO
const Enums = {
settlementStates: await request.server.methods.enums('settlementStates'),
settlementWindowStates: await request.server.methods.enums('settlementWindowStates'),
transferStates: await request.server.methods.enums('transferStates'),
transferParticipantRoleTypes: await request.server.methods.enums('transferParticipantRoleTypes'),
ledgerEntryTypes: await request.server.methods.enums('ledgerEntryTypes')
}
let settlementResult = await Settlements.settlementEventTrigger(request.payload, Enums, { logger: request.server.log })
let settlementResult = await Settlements.settlementEventTrigger(request.payload, Enums)
return h.response(settlementResult)
} catch (e) {
request.server.log('error', e)
return Boom.notFound(e.message)
return Boom.badRequest(e.message)
}
}
}
13 changes: 7 additions & 6 deletions src/handlers/settlements/{id}.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ module.exports = {
* responses: 200, 400, 401, 404, 415, default
*/
get: async function getSettlementById (request, h) {
const Enums = await request.server.methods.enums('settlementStates')
const settlementId = request.params.id
try {
const Enums = await request.server.methods.enums('settlementStates')
request.server.log('info', `get settlement by Id requested with id ${settlementId}`)
let settlementResult = await settlement.getById({ settlementId }, Enums, { logger: request.server.log })
let settlementResult = await settlement.getById({ settlementId }, Enums)
return h.response(settlementResult)
} catch (e) {
request.server.log('error', `ERROR settlementWindowId: ${settlementId} not found`)
request.server.log('error', e)
return Boom.notFound(e.message)
}
},
Expand All @@ -74,11 +74,12 @@ module.exports = {

put: async function updateSettlementById (request, h) {
const settlementId = request.params.id
const Enums = await request.server.methods.enums('settlementStates')
try {
return await settlement.putById(settlementId, request.payload, Enums, { logger: request.server.log })
const Enums = await request.server.methods.enums('settlementStates')
return await settlement.putById(settlementId, request.payload, Enums)
} catch (e) {
throw (Boom.boomify(e))
request.server.log('error', e)
return Boom.badRequest(e)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,14 @@ module.exports = {
*/

get: async function getSettlementBySettlementParticipantAccount (request, h) {
const Enums = await request.server.methods.enums('settlementWindowStates')
const { settlementId, participantId, accountId } = request.params
try {
let result = await Settlements.getByIdParticipantAccount({ settlementId, participantId, accountId }, Enums, { logger: request.server.log })
const Enums = await request.server.methods.enums('settlementWindowStates')
const { settlementId, participantId, accountId } = request.params
let result = await Settlements.getByIdParticipantAccount({ settlementId, participantId, accountId }, Enums)
return h.response(result)
} catch (e) {
return Boom.boomify(e)
request.server.log('error', e)
return Boom.badRequest(e)
}
}
/**
Expand Down
19 changes: 11 additions & 8 deletions src/models/settlement/facade.js
Original file line number Diff line number Diff line change
Expand Up @@ -621,8 +621,11 @@ const Facade = {
}
},

getAccountById: async function ({ settlementParticipantCurrencyId }, enums = {}) {
getAccountById: async function ({ settlementParticipantCurrencyList }, enums = {}) {
try {
let settlementParticipantCurrencyIdList = settlementParticipantCurrencyList.map(a => {
return a.settlementParticipantCurrencyId
})
let result = await Db.settlementParticipantCurrency.query(builder => {
return builder
.join('settlementParticipantCurrencyStateChange AS spcsc', 'spcsc.settlementParticipantCurrencyStateChangeId', 'settlementParticipantCurrency.currentStateChangeId')
Expand All @@ -635,7 +638,7 @@ const Facade = {
'settlementParticipantCurrency.netAmount as netAmount',
'pc.currencyId AS currency'
)
.where({ settlementParticipantCurrencyId })
.whereIn('settlementParticipantCurrency.settlementParticipantCurrencyId', settlementParticipantCurrencyIdList)
})
return result
} catch (err) {
Expand Down Expand Up @@ -670,10 +673,10 @@ const Facade = {
try {
let result = await Db.settlementSettlementWindow.query(builder => {
return builder
.join('settlementWindow AS sw', 'sw.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
.join('settlementWindow', 'settlementWindow.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
.join('settlementWindowStateChange AS swsc', 'swsc.settlementWindowStateChangeId', 'settlementWindow.currentStateChangeId')
.join('settlementTransferParticipant AS stp', function () {
this.on('stp.settlementWindowId', 'sw.settlementWindowId')
this.on('stp.settlementWindowId', 'settlementWindow.settlementWindowId')
.on('stp.participantCurrencyId', accountId)
})
.distinct(
Expand All @@ -684,7 +687,7 @@ const Facade = {
'swsc.createdDate as changedDate'
)
.select()
.where({ settlementId })
.where('settlementSettlementWindow.settlementId', settlementId)
})
return result
} catch (err) {
Expand All @@ -695,10 +698,10 @@ const Facade = {
try {
let result = await Db.settlementSettlementWindow.query(builder => {
return builder
.join('settlementWindow AS sw', 'sw.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
.join('settlementWindow', 'settlementWindow.settlementWindowId', 'settlementSettlementWindow.settlementWindowId')
.join('settlementWindowStateChange AS swsc', 'swsc.settlementWindowStateChangeId', 'settlementWindow.currentStateChangeId')
.join('settlementTransferParticipant AS stp', async function () {
this.on('stp.settlementWindowId', 'sw.settlementWindowId')
this.on('stp.settlementWindowId', 'settlementWindow.settlementWindowId')
.onIn('stp.participantCurrencyId', await Db.participantCurrency.find({ participantId }))
})
.distinct(
Expand All @@ -709,7 +712,7 @@ const Facade = {
'swsc.createdDate as changedDate'
)
.select()
.where({ settlementId })
.where('settlementSettlementWindow.settlementId', settlementId)
})
return result
} catch (err) {
Expand Down
8 changes: 3 additions & 5 deletions src/models/settlement/settlementParticipantCurrency.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,9 @@ const Db = require('../index')

const getAccountInSettlement = async ({ settlementId, accountId }, enums = {}) => {
try {
let result = await Db.settlementParticipantCurrency.query(builder => {
return builder
.select('settlementParticipantCurrencyId')
.where({ settlementId })
.andWhere('settlementParticipantCurrencyId', accountId)
let result = await Db.settlementParticipantCurrency.find({
settlementId,
settlementParticipantCurrencyId: accountId
})
return result
} catch (err) {
Expand Down
Loading