@@ -40,8 +40,11 @@ async function processUpdate(message) {
40
40
// add winner payment
41
41
try {
42
42
const winnerPrizes = _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'placement' ] ) , 'prizes' , [ ] )
43
+ const checkpointPrizes = _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'checkpoint' ] ) , 'prizes' , [ ] )
43
44
// 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' ] )
45
48
if ( _ . isEmpty ( winnerPrizes ) ) {
46
49
logger . warn ( `For challenge ${ v5ChallengeId } , no winner payment avaiable` )
47
50
} else if ( winnerPrizes . length !== winnerMembers . length ) {
@@ -52,7 +55,7 @@ async function processUpdate(message) {
52
55
const payment = _ . assign ( {
53
56
memberId : winnerMembers [ i - 1 ] . userId ,
54
57
amount : winnerPrizes [ i - 1 ] . value ,
55
- desc : `Task - ${ message . payload . name } - ${ i } Place` ,
58
+ desc : `Payment - ${ message . payload . name } - ${ i } Place` ,
56
59
typeId : config . WINNER_PAYMENT_TYPE_ID
57
60
} , basePayment )
58
61
@@ -69,6 +72,33 @@ async function processUpdate(message) {
69
72
}
70
73
}
71
74
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
+
72
102
// add copilot payment
73
103
const copilotId = await helper . getCopilotId ( message . payload . id )
74
104
const copilotAmount = _ . get ( _ . head ( _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'copilot' ] ) , 'prizes' , [ ] ) ) , 'value' )
@@ -124,7 +154,8 @@ processUpdate.schema = {
124
154
winners : Joi . array ( ) . items ( Joi . object ( {
125
155
userId : Joi . number ( ) . integer ( ) . positive ( ) . required ( ) ,
126
156
handle : Joi . string ( ) ,
127
- placement : Joi . number ( ) . integer ( ) . positive ( ) . required ( )
157
+ placement : Joi . number ( ) . integer ( ) . positive ( ) . required ( ) ,
158
+ type : Joi . string ( ) . valid ( [ 'placement' , 'checkpoint' ] )
128
159
} ) . unknown ( true ) ) ,
129
160
type : Joi . string ( ) . required ( ) ,
130
161
status : Joi . string ( ) . required ( ) ,
0 commit comments