@@ -9,74 +9,86 @@ const _ = require('lodash')
9
9
//const errors = require('../common/errors')
10
10
const logger = require ( '../common/logger' )
11
11
const models = require ( '../models' )
12
+ const api = require ( '../common/broadcastAPIHelper' )
13
+
12
14
const logPrefix = "BulkNotificationHook: "
13
15
14
16
/**
15
17
* CREATE NEW TABLES IF NOT EXISTS
16
18
*/
17
- models . BulkMessages . sync ( ) . then ( ( t ) => {
19
+ models . BulkMessages . sync ( ) . then ( ( t ) => {
18
20
models . BulkMessageUserRefs . sync ( )
19
21
} )
20
22
21
23
/**
22
24
* Main function
23
25
* @param {Integer } userId
24
26
*/
25
- function checkBulkMessageForUser ( userId ) {
26
- models . BulkMessages . count ( ) . then ( function ( tBulkMessages ) {
27
- if ( tBulkMessages > 0 ) {
28
- // the condition can help to optimize the execution
29
- models . BulkMessageUserRefs . count ( {
30
- where : {
31
- user_id : userId
32
- }
33
- } ) . then ( function ( tUserRefs ) {
34
- if ( tUserRefs < tBulkMessages ) {
35
- logger . info ( `${ logPrefix } Need to sync broadcast message for current user ${ userId } ` )
36
- syncBulkMessageForUser ( userId )
37
- }
38
- } ) . catch ( ( e ) => {
39
- logger . error ( `${ logPrefix } Failed to check total userRefs condition. Error: ` , e )
40
- } )
41
- }
42
- } ) . catch ( ( e ) => {
43
- logger . error ( `${ logPrefix } Failed to check total broadcast message condition. Error: ` , e )
27
+ async function checkBulkMessageForUser ( userId ) {
28
+ return new Promise ( function ( resolve , reject ) {
29
+ models . BulkMessages . count ( ) . then ( function ( tBulkMessages ) {
30
+ if ( tBulkMessages > 0 ) {
31
+ // the condition can help to optimize the execution
32
+ models . BulkMessageUserRefs . count ( {
33
+ where : {
34
+ user_id : userId
35
+ }
36
+ } ) . then ( async function ( tUserRefs ) {
37
+ if ( tUserRefs < tBulkMessages ) {
38
+ logger . info ( `${ logPrefix } Need to sync broadcast message for current user ${ userId } ` )
39
+ syncBulkMessageForUser ( userId ) . catch ( ( e ) => {
40
+ reject ( e )
41
+ } )
42
+ }
43
+ resolve ( true ) // resolve here
44
+ } ) . catch ( ( e ) => {
45
+ logger . error ( `${ logPrefix } Failed to check total userRefs condition. Error: ` , e )
46
+ reject ( e )
47
+ } )
48
+ } else {
49
+ resolve ( true )
50
+ }
51
+ } ) . catch ( ( e ) => {
52
+ logger . error ( `${ logPrefix } Failed to check total broadcast message condition. Error: ` , e )
53
+ reject ( e )
54
+ } )
44
55
} )
45
56
}
46
57
47
58
/**
48
59
* Helper function
49
60
* @param {Integer } userId
50
61
*/
51
- function syncBulkMessageForUser ( userId ) {
62
+ async function syncBulkMessageForUser ( userId ) {
52
63
53
- /**
54
- * Check if all bulk mesaages processed for current user or not
55
- */
56
- let q = "SELECT a.* FROM bulk_messages AS a " +
57
- " LEFT OUTER JOIN (SELECT id as refid, bulk_message_id " +
58
- " FROM bulk_message_user_refs AS bmur WHERE bmur.user_id=$1)" +
59
- " AS b ON a.id=b.bulk_message_id WHERE b.refid IS NULL"
60
- models . sequelize . query ( q , { bind : [ userId ] } )
61
- . then ( function ( res ) {
62
- _ . map ( res [ 0 ] , async ( r ) => {
63
- logger . info ( `${ logPrefix } need to process for bulk message id: ` , r . id )
64
- // call function to check if current user in reciepent group
65
- // insert row in userRef table
66
- if ( isBroadCastMessageForUser ( userId , r ) ) {
67
- // current user in reciepent group
68
- createNotificationForUser ( userId , r )
69
- } else {
70
- /**
71
- * Insert row in userRef with notification-id null value
72
- * It means - broadcast message in not for current user
73
- */
74
- insertUserRefs ( userId , r . id , null )
75
- }
64
+ return new Promise ( function ( resolve , reject ) {
65
+ /**
66
+ * Check if all bulk mesaages processed for current user or not
67
+ */
68
+ let q = "SELECT a.* FROM bulk_messages AS a " +
69
+ " LEFT OUTER JOIN (SELECT id as refid, bulk_message_id " +
70
+ " FROM bulk_message_user_refs AS bmur WHERE bmur.user_id=$1)" +
71
+ " AS b ON a.id=b.bulk_message_id WHERE b.refid IS NULL"
72
+ models . sequelize . query ( q , { bind : [ userId ] } )
73
+ . then ( function ( res ) {
74
+ _ . map ( res [ 0 ] , ( r ) => {
75
+ logger . info ( `${ logPrefix } need to process for bulk message id: ` , r . id )
76
+ isBroadCastMessageForUser ( userId , r ) . then ( ( result ) => {
77
+ if ( result ) {
78
+ createNotificationForUser ( userId , r )
79
+ } else {
80
+ insertUserRefs ( userId , r . id , null )
81
+ }
82
+ } ) . catch ( ( err ) => {
83
+ logger . error ( "failed in checking recipient group condition, Error:" , err )
84
+ } )
85
+ } )
86
+ resolve ( true )
87
+ } ) . catch ( ( e ) => {
88
+ logger . error ( `${ logPrefix } Failed to check bulk message condition: ` , e )
89
+ reject ( e )
76
90
} )
77
- } ) . catch ( ( e ) => {
78
- logger . error ( `${ logPrefix } Failed to check bulk message condition: ` , err )
79
- } )
91
+ } )
80
92
}
81
93
82
94
/**
@@ -85,9 +97,8 @@ function syncBulkMessageForUser(userId) {
85
97
* @param {Integer } userId
86
98
* @param {Object } bulkMessage
87
99
*/
88
- function isBroadCastMessageForUser ( userId , bulkMessage ) {
89
- // TODO
90
- return true ;
100
+ async function isBroadCastMessageForUser ( userId , bulkMessage ) {
101
+ return api . checkBroadcastMessageForUser ( userId , bulkMessage )
91
102
}
92
103
93
104
/**
@@ -96,8 +107,8 @@ function isBroadCastMessageForUser(userId, bulkMessage) {
96
107
* @param {Integer } bulkMessageId
97
108
* @param {Integer } notificationId
98
109
*/
99
- function insertUserRefs ( userId , bulkMessageId , notificationId ) {
100
- models . BulkMessageUserRefs . create ( {
110
+ async function insertUserRefs ( userId , bulkMessageId , notificationId ) {
111
+ await models . BulkMessageUserRefs . create ( {
101
112
bulk_message_id : bulkMessageId ,
102
113
user_id : userId ,
103
114
notification_id : notificationId ,
@@ -113,8 +124,8 @@ function insertUserRefs(userId, bulkMessageId, notificationId) {
113
124
* @param {Integer } userId
114
125
* @param {Object } bulkMessage
115
126
*/
116
- function createNotificationForUser ( userId , bulkMessage ) {
117
- models . Notification . create ( {
127
+ async function createNotificationForUser ( userId , bulkMessage ) {
128
+ await models . Notification . create ( {
118
129
userId : userId ,
119
130
type : bulkMessage . type ,
120
131
contents : {
@@ -126,9 +137,9 @@ function createNotificationForUser(userId, bulkMessage) {
126
137
read : false ,
127
138
seen : false ,
128
139
version : null ,
129
- } ) . then ( ( n ) => {
140
+ } ) . then ( async ( n ) => {
130
141
logger . info ( `${ logPrefix } Inserted notification record ${ n . id } for current user ${ userId } ` )
131
- insertUserRefs ( userId , bulkMessage . id , n . id )
142
+ await insertUserRefs ( userId , bulkMessage . id , n . id )
132
143
} ) . catch ( ( err ) => {
133
144
logger . error ( `${ logPrefix } Error in inserting broadcast message ` , err )
134
145
} )
0 commit comments