@@ -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,23 +55,38 @@ 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
59
- const paymentExists = await paymentService . paymentExists ( payment )
60
- logger . debug ( `Payment Exists Response: ${ JSON . stringify ( paymentExists ) } ` )
61
- if ( ! paymentExists || paymentExists . length === 0 ) {
62
- await paymentService . createPayment ( payment )
63
- } else {
64
- logger . error ( `Payment Exists for ${ v5ChallengeId } , skipping - ${ JSON . stringify ( paymentExists ) } ` )
65
- }
62
+ await paymentService . createPayment ( payment )
66
63
}
67
64
} catch ( error ) {
68
65
logger . error ( `For challenge ${ v5ChallengeId } , add winner payments error: ${ error } ` )
69
66
}
70
67
}
71
68
69
+ if ( _ . isEmpty ( checkpointPrizes ) ) {
70
+ logger . warn ( `For challenge ${ v5ChallengeId } , no checkpoint winner payment avaiable` )
71
+ } else if ( checkpointPrizes . length !== checkpointWinnerMembers . length ) {
72
+ logger . error ( `For challenge ${ v5ChallengeId } , there is ${ checkpointPrizes . length } user prizes but ${ checkpointWinnerMembers . length } winners` )
73
+ } else {
74
+ try {
75
+ for ( let i = 1 ; i <= checkpointPrizes . length ; i ++ ) {
76
+ const payment = _ . assign ( {
77
+ memberId : checkpointWinnerMembers [ i - 1 ] . userId ,
78
+ amount : checkpointPrizes [ i - 1 ] . value ,
79
+ desc : `Checkpoint payment - ${ message . payload . name } - ${ i } Place` ,
80
+ typeId : config . CHECKPOINT_WINNER_PAYMENT_TYPE_ID
81
+ } , basePayment )
82
+
83
+ await paymentService . createPayment ( payment )
84
+ }
85
+ } catch ( error ) {
86
+ logger . error ( `For challenge ${ v5ChallengeId } , add checkpoint winner payments error: ${ error } ` )
87
+ }
88
+ }
89
+
72
90
// add copilot payment
73
91
const copilotId = await helper . getCopilotId ( message . payload . id )
74
92
const copilotAmount = _ . get ( _ . head ( _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'copilot' ] ) , 'prizes' , [ ] ) ) , 'value' )
@@ -83,16 +101,10 @@ async function processUpdate(message) {
83
101
const copilotPayment = _ . assign ( {
84
102
memberId : copilotId ,
85
103
amount : copilotAmount ,
86
- desc : ( copilotPaymentDesc ? copilotPaymentDesc : `Task - ${ message . payload . name } - Copilot` ) ,
104
+ desc : ( copilotPaymentDesc ? copilotPaymentDesc : `${ message . payload . name } - Copilot` ) ,
87
105
typeId : config . COPILOT_PAYMENT_TYPE_ID
88
106
} , basePayment )
89
- const paymentExists = await paymentService . paymentExists ( copilotPayment )
90
- logger . debug ( `Copilot Payment Exists Response: ${ JSON . stringify ( paymentExists ) } ` )
91
- if ( ! paymentExists || paymentExists . length === 0 ) {
92
- await paymentService . createPayment ( copilotPayment )
93
- } else {
94
- logger . error ( `Copilot Payment Exists for ${ v5ChallengeId } , skipping - ${ JSON . stringify ( paymentExists ) } ` )
95
- }
107
+ await paymentService . createPayment ( copilotPayment )
96
108
} catch ( error ) {
97
109
logger . error ( `For challenge ${ v5ChallengeId } , add copilot payments error: ${ error } ` )
98
110
}
@@ -113,18 +125,19 @@ processUpdate.schema = {
113
125
legacyId : Joi . number ( ) . integer ( ) . positive ( ) ,
114
126
task : Joi . object ( ) . keys ( {
115
127
memberId : Joi . string ( ) . allow ( null )
116
- } ) . unknown ( true ) . required ( ) ,
128
+ } ) . unknown ( true ) ,
117
129
name : Joi . string ( ) . required ( ) ,
118
130
prizeSets : Joi . array ( ) . items ( Joi . object ( ) . keys ( {
119
- type : Joi . string ( ) . valid ( 'copilot' , 'placement' ) . required ( ) ,
131
+ type : Joi . string ( ) . valid ( 'copilot' , 'placement' , 'checkpoint' ) . required ( ) ,
120
132
prizes : Joi . array ( ) . items ( Joi . object ( ) . keys ( {
121
133
value : Joi . number ( ) . positive ( ) . required ( )
122
134
} ) . unknown ( true ) )
123
135
} ) . unknown ( true ) ) . min ( 1 ) ,
124
136
winners : Joi . array ( ) . items ( Joi . object ( {
125
137
userId : Joi . number ( ) . integer ( ) . positive ( ) . required ( ) ,
126
138
handle : Joi . string ( ) ,
127
- placement : Joi . number ( ) . integer ( ) . positive ( ) . required ( )
139
+ placement : Joi . number ( ) . integer ( ) . positive ( ) . required ( ) ,
140
+ type : Joi . string ( ) . valid ( [ 'placement' , 'checkpoint' ] )
128
141
} ) . unknown ( true ) ) ,
129
142
type : Joi . string ( ) . required ( ) ,
130
143
status : Joi . string ( ) . required ( ) ,
0 commit comments