Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit b391e16

Browse files
support checkpoint prizes
1 parent 6340b5e commit b391e16

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

config/default.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ module.exports = {
4343
PAYMENT_STATUS_ID: process.env.PAYMENT_STATUS_ID || 55, // on hold
4444
MODIFICATION_RATIONALE_ID: process.env.MODIFICATION_RATIONALE_ID || 1,
4545
WINNER_PAYMENT_TYPE_ID: process.env.WINNER_PAYMENT_TYPE_ID || 72,
46+
CHECKPOINT_WINNER_PAYMENT_TYPE_ID: process.env.CHECKPOINT_WINNER_PAYMENT_TYPE_ID || 64,
4647
COPILOT_PAYMENT_TYPE_ID: process.env.COPILOT_PAYMENT_TYPE_ID || 74,
4748

4849
V5_PAYMENT_DETAIL_STATUS_REASON_ID: process.env.V5_PAYMENT_DETAIL_STATUS_REASON_ID || 500,

src/app.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ const dataHandler = (messageSet, topic, partition) => Promise.each(messageSet, a
4444
return
4545
}
4646

47-
// Currently only process payments for challenges with `legacy.pureV5Task: true`
48-
if (!_.get(messageJSON.payload, 'legacy.pureV5Task', false)) {
49-
logger.info(`Challenge Legacy Object ${JSON.stringify(_.get(messageJSON.payload, 'legacy'))} does not have legacy.pureV5Task: true`)
47+
// Currently only process payments for challenges with `legacy.pureV5Task: true` or `legacy.pureV5: true`
48+
if (!_.get(messageJSON.payload, 'legacy.pureV5Task', false) && !_.get(messageJSON.payload, 'legacy.pureV5', false)) {
49+
logger.info(`Challenge Legacy Object ${JSON.stringify(_.get(messageJSON.payload, 'legacy'))} does not have legacy.pureV5Task: true or legacy.pureV5: true`)
5050
await consumer.commitOffset({ topic, partition, offset: m.offset })
5151
return
5252
}

src/services/processorService.js

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@ async function processUpdate(message) {
4040
// add winner payment
4141
try {
4242
const winnerPrizes = _.get(_.find(message.payload.prizeSets, ['type', 'placement']), 'prizes', [])
43+
const checkpointPrizes = _.get(_.find(message.payload.prizeSets, ['type', 'checkpoint']), 'prizes', [])
4344
// const winnerPaymentDesc = _.get(_.find(message.payload.prizeSets, ['type', 'placement']), 'description', '')
44-
const winnerMembers = _.sortBy(_.get(message.payload, 'winners', []), ['placement'])
45+
//` w => w.type === 'placement' || _.isUndefined(w.type)` is used here to support challenges where the type is not set (old data or other tracks that only have placements)
46+
const winnerMembers = _.sortBy(_.filter(_.get(message.payload, 'winners', []), w => w.type === 'placement' || _.isUndefined(w.type)), ['placement'])
47+
const checkpointWinnerMembers = _.sortBy(_.filter(_.get(message.payload, 'winners', []), w => w.type === 'checkpoint'), ['placement'])
4548
if (_.isEmpty(winnerPrizes)) {
4649
logger.warn(`For challenge ${v5ChallengeId}, no winner payment avaiable`)
4750
} else if (winnerPrizes.length !== winnerMembers.length) {
@@ -52,7 +55,7 @@ async function processUpdate(message) {
5255
const payment = _.assign({
5356
memberId: winnerMembers[i - 1].userId,
5457
amount: winnerPrizes[i - 1].value,
55-
desc: `Task - ${message.payload.name} - ${i} Place`,
58+
desc: `Payment - ${message.payload.name} - ${i} Place`,
5659
typeId: config.WINNER_PAYMENT_TYPE_ID
5760
}, basePayment)
5861

@@ -69,6 +72,33 @@ async function processUpdate(message) {
6972
}
7073
}
7174

75+
if (_.isEmpty(checkpointPrizes)) {
76+
logger.warn(`For challenge ${v5ChallengeId}, no checkpoint winner payment avaiable`)
77+
} else if (checkpointPrizes.length !== checkpointWinnerMembers.length) {
78+
logger.error(`For challenge ${v5ChallengeId}, there is ${checkpointPrizes.length} user prizes but ${checkpointWinnerMembers.length} winners`)
79+
} else {
80+
try {
81+
for (let i = 1; i <= checkpointPrizes.length; i++) {
82+
const payment = _.assign({
83+
memberId: checkpointWinnerMembers[i - 1].userId,
84+
amount: checkpointPrizes[i - 1].value,
85+
desc: `Payment - ${message.payload.name} - ${i} Place`,
86+
typeId: config.CHECKPOINT_WINNER_PAYMENT_TYPE_ID
87+
}, basePayment)
88+
89+
const paymentExists = await paymentService.paymentExists(payment)
90+
logger.debug(`Payment Exists Response: ${JSON.stringify(paymentExists)}`)
91+
if(!paymentExists || paymentExists.length === 0) {
92+
await paymentService.createPayment(payment)
93+
} else {
94+
logger.error(`Payment Exists for ${v5ChallengeId}, skipping - ${JSON.stringify(paymentExists)}`)
95+
}
96+
}
97+
} catch (error) {
98+
logger.error(`For challenge ${v5ChallengeId}, add checkpoint winner payments error: ${error}`)
99+
}
100+
}
101+
72102
// add copilot payment
73103
const copilotId = await helper.getCopilotId(message.payload.id)
74104
const copilotAmount = _.get(_.head(_.get(_.find(message.payload.prizeSets, ['type', 'copilot']), 'prizes', [])), 'value')
@@ -124,7 +154,8 @@ processUpdate.schema = {
124154
winners: Joi.array().items(Joi.object({
125155
userId: Joi.number().integer().positive().required(),
126156
handle: Joi.string(),
127-
placement: Joi.number().integer().positive().required()
157+
placement: Joi.number().integer().positive().required(),
158+
type: Joi.string().valid(['placement', 'checkpoint'])
128159
}).unknown(true)),
129160
type: Joi.string().required(),
130161
status: Joi.string().required(),

0 commit comments

Comments
 (0)