@@ -34,30 +34,47 @@ async function processUpdate (message) {
34
34
createUser : createUserId
35
35
}
36
36
37
- // the properties of userPayment
38
- try {
39
- const userPayment = _ . assign ( {
40
- memberId : message . payload . task . memberId ,
41
- amount : _ . head ( _ . find ( message . payload . prizeSets , [ 'type' , 'placement' ] ) . prizes ) . value ,
42
- desc : `Task - ${ message . payload . name } - First Place` ,
43
- typeId : config . WINNER_PAYMENT_TYPE_ID
44
- } , basePayment )
45
- await paymentService . createPayment ( userPayment )
46
- } catch ( error ) {
47
- logger . error ( `For challenge ${ challengeId } , user prize info missing: ${ error } ` )
37
+ // add winner payment
38
+ const winnerPrizes = _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'placement' ] ) , 'prizes' , [ ] )
39
+ const winnerMembers = _ . sortBy ( _ . get ( message . payload , 'winners' , [ ] ) , [ 'placement' ] )
40
+ if ( _ . isEmpty ( winnerPrizes ) ) {
41
+ logger . warn ( `For challenge ${ challengeId } , no winner payment avaiable` )
42
+ } else if ( winnerPrizes . length !== winnerMembers . length ) {
43
+ logger . error ( `For challenge ${ challengeId } , there is ${ winnerPrizes . length } user prizes but ${ winnerMembers . length } winners` )
44
+ } else {
45
+ try {
46
+ for ( let i = 1 ; i <= winnerPrizes . length ; i ++ ) {
47
+ await paymentService . createPayment ( _ . assign ( {
48
+ memberId : winnerMembers [ i - 1 ] . userId ,
49
+ amount : winnerPrizes [ i - 1 ] . value ,
50
+ desc : `Task - ${ message . payload . name } - ${ i } Place` ,
51
+ typeId : config . WINNER_PAYMENT_TYPE_ID
52
+ } , basePayment ) )
53
+ }
54
+ } catch ( error ) {
55
+ logger . error ( `For challenge ${ challengeId } , add winner payments error: ${ error } ` )
56
+ }
48
57
}
49
58
50
- // the properties of copilotPayment
51
- try {
52
- const copilotPayment = _ . assign ( {
53
- memberId : createUserId ,
54
- amount : _ . head ( _ . find ( message . payload . prizeSets , [ 'type' , 'copilot' ] ) . prizes ) . value ,
55
- desc : `Task - ${ message . payload . name } - Copilot` ,
56
- typeId : config . COPILOT_PAYMENT_TYPE_ID
57
- } , basePayment )
58
- await paymentService . createPayment ( copilotPayment )
59
- } catch ( error ) {
60
- logger . debug ( `For challenge ${ challengeId } , no copilot payment avaiable` )
59
+ // add copilot payment
60
+ const copilotId = await helper . getCopilotId ( message . payload . id )
61
+ const copilotAmount = _ . get ( _ . head ( _ . get ( _ . find ( message . payload . prizeSets , [ 'type' , 'copilot' ] ) , 'prizes' , [ ] ) ) , 'value' )
62
+ if ( ! copilotAmount ) {
63
+ logger . warn ( `For challenge ${ challengeId } , no copilot payment avaiable` )
64
+ } else if ( ! copilotId ) {
65
+ logger . warn ( `For challenge ${ challengeId } , no copilot memberId avaiable` )
66
+ } else {
67
+ try {
68
+ const copilotPayment = _ . assign ( {
69
+ memberId : copilotId ,
70
+ amount : copilotAmount ,
71
+ desc : `Task - ${ message . payload . name } - Copilot` ,
72
+ typeId : config . COPILOT_PAYMENT_TYPE_ID
73
+ } , basePayment )
74
+ await paymentService . createPayment ( copilotPayment )
75
+ } catch ( error ) {
76
+ logger . error ( `For challenge ${ challengeId } , add copilot payments error: ${ error } ` )
77
+ }
61
78
}
62
79
}
63
80
@@ -68,18 +85,23 @@ processUpdate.schema = {
68
85
timestamp : Joi . date ( ) . required ( ) ,
69
86
'mime-type' : Joi . string ( ) . required ( ) ,
70
87
payload : Joi . object ( ) . keys ( {
71
- id : Joi . string ( ) ,
88
+ id : Joi . string ( ) . required ( ) ,
72
89
legacyId : Joi . number ( ) . integer ( ) . positive ( ) ,
73
90
task : Joi . object ( ) . keys ( {
74
91
memberId : Joi . string ( ) . allow ( null )
75
92
} ) . unknown ( true ) . required ( ) ,
76
- name : Joi . string ( ) ,
93
+ name : Joi . string ( ) . required ( ) ,
77
94
prizeSets : Joi . array ( ) . items ( Joi . object ( ) . keys ( {
78
95
type : Joi . string ( ) . valid ( 'copilot' , 'placement' ) . required ( ) ,
79
96
prizes : Joi . array ( ) . items ( Joi . object ( ) . keys ( {
80
97
value : Joi . number ( ) . positive ( ) . required ( )
81
98
} ) . unknown ( true ) )
82
99
} ) . unknown ( true ) ) . min ( 1 ) ,
100
+ winners : Joi . array ( ) . items ( Joi . object ( {
101
+ userId : Joi . string ( ) . required ( ) ,
102
+ handle : Joi . string ( ) ,
103
+ placement : Joi . number ( ) . integer ( ) . positive ( ) . required ( )
104
+ } ) . unknown ( true ) ) ,
83
105
type : Joi . string ( ) . required ( ) ,
84
106
status : Joi . string ( ) . required ( ) ,
85
107
createdBy : Joi . string ( ) . required ( )
0 commit comments