@@ -172,6 +172,56 @@ addGroupMember.schema = Joi.alternatives().try(
172
172
} )
173
173
)
174
174
175
+ /**
176
+ * Add group members in bulk.
177
+ * @param {Object } currentUser the current user
178
+ * @param {String } groupId the id of group to add member
179
+ * @param {Array } data the data for members to add
180
+ * @returns {Object } the added group membership
181
+ */
182
+ async function addGroupMemberBulk ( currentUser , groupId , data ) {
183
+ logger . debug ( `Enter in addGroupMemberBulk - Group = ${ groupId } Data = ${ JSON . stringify ( data ) } ` )
184
+
185
+ const membersAddRes = await Promise . allSettled ( data . members . map ( member => addGroupMember ( currentUser , groupId , member ) ) )
186
+
187
+ const result = { }
188
+ result . groupId = groupId
189
+
190
+ const members = data . members . map ( ( member , i ) => {
191
+ if ( membersAddRes [ i ] . status === 'fulfilled' ) {
192
+ return {
193
+ memberId : member . memberId ,
194
+ status : 'success'
195
+ }
196
+ } else {
197
+ return {
198
+ memberId : member . memberId ,
199
+ status : 'failed' ,
200
+ message : membersAddRes [ i ] . reason . message
201
+ }
202
+ }
203
+ } )
204
+
205
+ result . members = members
206
+
207
+ return result
208
+ }
209
+
210
+ addGroupMemberBulk . schema = Joi . object ( ) . keys ( {
211
+ currentUser : Joi . any ( ) ,
212
+ groupId : Joi . id ( ) , // defined in app-bootstrap
213
+ data : Joi . object ( )
214
+ . keys ( {
215
+ members : Joi . array ( ) . items (
216
+ Joi . object ( {
217
+ memberId : Joi . id ( ) ,
218
+ membershipType : Joi . string ( ) . valid ( _ . values ( config . MEMBERSHIP_TYPES ) ) . required ( )
219
+ } )
220
+ )
221
+ . required ( )
222
+ } )
223
+ } )
224
+
175
225
/**
176
226
* Delete group member.
177
227
* @param {Object } currentUser the current user
@@ -257,6 +307,50 @@ deleteGroupMember.schema = {
257
307
query : Joi . object ( ) . allow ( '' , null )
258
308
}
259
309
310
+ /**
311
+ * Delete group members in bulk.
312
+ * @param {Object } currentUser the current user
313
+ * @param {String } groupId the id of group from members to delete
314
+ * @param {Array } data the data for members to delete
315
+ * @returns {Object } the deleted group membership
316
+ */
317
+ async function deleteGroupMemberBulk ( currentUser , groupId , data ) {
318
+ logger . debug ( `Enter in deleteGroupMemberBulk - Group = ${ groupId } Data = ${ JSON . stringify ( data ) } ` )
319
+
320
+ const membersAddRes = await Promise . allSettled ( data . members . map ( member => deleteGroupMember ( currentUser , groupId , member ) ) )
321
+
322
+ const result = { }
323
+ result . groupId = groupId
324
+
325
+ const members = data . members . map ( ( member , i ) => {
326
+ if ( membersAddRes [ i ] . status === 'fulfilled' ) {
327
+ return {
328
+ memberId : member ,
329
+ status : 'success'
330
+ }
331
+ } else {
332
+ return {
333
+ memberId : member ,
334
+ status : 'failed' ,
335
+ message : membersAddRes [ i ] . reason . message
336
+ }
337
+ }
338
+ } )
339
+
340
+ result . members = members
341
+
342
+ return result
343
+ }
344
+
345
+ deleteGroupMemberBulk . schema = Joi . object ( ) . keys ( {
346
+ currentUser : Joi . any ( ) ,
347
+ groupId : Joi . id ( ) , // defined in app-bootstrap
348
+ data : Joi . object ( )
349
+ . keys ( {
350
+ members : Joi . array ( ) . required ( )
351
+ } )
352
+ } )
353
+
260
354
/**
261
355
* Get group members
262
356
* @param {Object } currentUser the current user
@@ -597,7 +691,9 @@ module.exports = {
597
691
getGroupMembersCount,
598
692
listGroupsMemberCount,
599
693
getMemberGroups,
600
- groupValidityCheck
694
+ groupValidityCheck,
695
+ addGroupMemberBulk,
696
+ deleteGroupMemberBulk
601
697
}
602
698
603
699
logger . buildService ( module . exports )
0 commit comments