Skip to content

added functionalities to add and remove the members in bulk #118

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 13, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app-bootstrap.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/**
* App bootstrap
*/
global.Promise = require('bluebird')
// commenting this as need to use the pure Promise features
// global.Promise = require('bluebird')
const Joi = require('joi')

Joi.optionalId = () => Joi.string()
Expand Down
42 changes: 31 additions & 11 deletions src/controllers/GroupMembershipController.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,21 @@ async function getGroupMembers (req, res) {
* @param res the response
*/
async function addGroupMember (req, res) {
const result = await service.addGroupMember(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.body
)
let result
if (req.body.members && req.body.members.length > 0) {
result = await service.addGroupMemberBulk(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.body
)
} else {
result = await service.addGroupMember(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.body
)
}

res.send(result)
}

Expand All @@ -53,12 +63,22 @@ async function getGroupMember (req, res) {
* @param res the response
*/
async function deleteGroupMember (req, res) {
const result = await service.deleteGroupMember(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.params.memberId ? req.params.memberId : null,
Object.keys(req.query).length !== 0 ? req.query : null
)
let result
if (req.body && req.body.members && req.body.members.length > 0) {
result = await service.deleteGroupMemberBulk(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.body
)
} else {
result = await service.deleteGroupMember(
req.authUser.isMachine ? 'M2M' : req.authUser,
req.params.groupId,
req.params.memberId ? req.params.memberId : null,
Object.keys(req.query).length !== 0 ? req.query : null
)
}

res.send(result)
}

Expand Down
98 changes: 97 additions & 1 deletion src/services/GroupMembershipService.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,56 @@ addGroupMember.schema = Joi.alternatives().try(
})
)

/**
* Add group members in bulk.
* @param {Object} currentUser the current user
* @param {String} groupId the id of group to add member
* @param {Array} data the data for members to add
* @returns {Object} the added group membership
*/
async function addGroupMemberBulk (currentUser, groupId, data) {
logger.debug(`Enter in addGroupMemberBulk - Group = ${groupId} Data = ${JSON.stringify(data)}`)

const membersAddRes = await Promise.allSettled(data.members.map(member => addGroupMember(currentUser, groupId, member)))

const result = {}
result.groupId = groupId

const members = data.members.map((member, i) => {
if (membersAddRes[i].status === 'fulfilled') {
return {
memberId: member.memberId,
status: 'success'
}
} else {
return {
memberId: member.memberId,
status: 'failed',
message: membersAddRes[i].reason.message
}
}
})

result.members = members

return result
}

addGroupMemberBulk.schema = Joi.object().keys({
currentUser: Joi.any(),
groupId: Joi.id(), // defined in app-bootstrap
data: Joi.object()
.keys({
members: Joi.array().items(
Joi.object({
memberId: Joi.id(),
membershipType: Joi.string().valid(_.values(config.MEMBERSHIP_TYPES)).required()
})
)
.required()
})
})

/**
* Delete group member.
* @param {Object} currentUser the current user
Expand Down Expand Up @@ -257,6 +307,50 @@ deleteGroupMember.schema = {
query: Joi.object().allow('', null)
}

/**
* Delete group members in bulk.
* @param {Object} currentUser the current user
* @param {String} groupId the id of group from members to delete
* @param {Array} data the data for members to delete
* @returns {Object} the deleted group membership
*/
async function deleteGroupMemberBulk (currentUser, groupId, data) {
logger.debug(`Enter in deleteGroupMemberBulk - Group = ${groupId} Data = ${JSON.stringify(data)}`)

const membersAddRes = await Promise.allSettled(data.members.map(member => deleteGroupMember(currentUser, groupId, member)))

const result = {}
result.groupId = groupId

const members = data.members.map((member, i) => {
if (membersAddRes[i].status === 'fulfilled') {
return {
memberId: member,
status: 'success'
}
} else {
return {
memberId: member,
status: 'failed',
message: membersAddRes[i].reason.message
}
}
})

result.members = members

return result
}

deleteGroupMemberBulk.schema = Joi.object().keys({
currentUser: Joi.any(),
groupId: Joi.id(), // defined in app-bootstrap
data: Joi.object()
.keys({
members: Joi.array().required()
})
})

/**
* Get group members
* @param {Object} currentUser the current user
Expand Down Expand Up @@ -597,7 +691,9 @@ module.exports = {
getGroupMembersCount,
listGroupsMemberCount,
getMemberGroups,
groupValidityCheck
groupValidityCheck,
addGroupMemberBulk,
deleteGroupMemberBulk
}

logger.buildService(module.exports)