module.exports = { inputs: { project: { type: 'ref', required: true }, user: { type: 'ref', required: true }, request: { type: 'ref' } }, exits: { conflict: {} }, fn: async function(inputs, exits) { const projectMembership = await ProjectMembership.create({ projectId: inputs.project.id, userId: inputs.user.id }) .intercept('E_UNIQUE', 'conflict') .fetch(); const { userIds, projectMemberships } = await sails.helpers.getMembershipUserIdsForProject( projectMembership.projectId, true ); userIds.forEach(userId => { if (userId !== projectMembership.userId) { sails.sockets.broadcast( `user:${userId}`, 'projectMembershipCreate', { item: projectMembership, included: { users: [inputs.user] } }, inputs.request ); } }); const users = await sails.helpers.getUsers(userIds); const boards = await sails.helpers.getBoardsForProject( projectMembership.projectId ); sails.sockets.broadcast( `user:${projectMembership.userId}`, 'projectCreate', { item: inputs.project, included: { users, projectMemberships, boards } } ); return exits.success(projectMembership); } };