diff --git a/server/api/helpers/board-memberships/delete-one.js b/server/api/helpers/board-memberships/delete-one.js index dd1d051a..236734ab 100644 --- a/server/api/helpers/board-memberships/delete-one.js +++ b/server/api/helpers/board-memberships/delete-one.js @@ -1,3 +1,5 @@ +const { v4: uuid } = require('uuid'); + module.exports = { inputs: { record: { @@ -29,18 +31,9 @@ module.exports = { const boardMembership = await BoardMembership.destroyOne(inputs.record.id); if (boardMembership) { - sails.sockets.broadcast( - `user:${boardMembership.userId}`, - 'boardMembershipDelete', - { - item: boardMembership, - }, - inputs.request, - ); - - const notifyBoard = () => { + const notify = (room) => { sails.sockets.broadcast( - `board:${boardMembership.boardId}`, + room, 'boardMembershipDelete', { item: boardMembership, @@ -54,16 +47,32 @@ module.exports = { inputs.project.id, ); - if (isProjectManager) { - notifyBoard(); - } else { - // TODO: also remove if unsubscribed to user + if (!isProjectManager) { sails.sockets.removeRoomMembersFromRooms( - `user:${boardMembership.userId}`, + `@user:${boardMembership.userId}`, `board:${boardMembership.boardId}`, - notifyBoard, + () => { + notify(`board:${boardMembership.boardId}`); + }, ); } + + notify(`user:${boardMembership.userId}`); + + if (isProjectManager) { + const tempRoom = uuid(); + + sails.sockets.addRoomMembersToRooms(`board:${boardMembership.boardId}`, tempRoom, () => { + sails.sockets.removeRoomMembersFromRooms( + `user:${boardMembership.userId}`, + tempRoom, + () => { + notify(tempRoom); + sails.sockets.removeRoomMembersFromRooms(tempRoom, tempRoom); + }, + ); + }); + } } return boardMembership; diff --git a/server/api/helpers/boards/delete-one.js b/server/api/helpers/boards/delete-one.js index b9aa17c1..8c61b823 100644 --- a/server/api/helpers/boards/delete-one.js +++ b/server/api/helpers/boards/delete-one.js @@ -17,16 +17,23 @@ module.exports = { const board = await Board.archiveOne(inputs.record.id); if (board) { - sails.sockets.leaveAll(`board:${board.id}`); + sails.sockets.removeRoomMembersFromRooms(`board:${board.id}`, `board:${board.id}`); - sails.sockets.broadcast( - `project:${board.projectId}`, - 'boardDelete', - { - item: board, - }, - inputs.request, - ); + const managerUserIds = await sails.helpers.projects.getManagerUserIds(board.projectId); + const memberUserIds = await sails.helpers.boards.getMemberUserIds(board.id); + + const userIds = _.union(managerUserIds, memberUserIds); + + userIds.forEach((userId) => { + sails.sockets.broadcast( + `user:${userId}`, + 'boardDelete', + { + item: board, + }, + inputs.request, + ); + }); } return board; diff --git a/server/api/helpers/boards/update-one.js b/server/api/helpers/boards/update-one.js index 47418178..873d5690 100644 --- a/server/api/helpers/boards/update-one.js +++ b/server/api/helpers/boards/update-one.js @@ -25,9 +25,10 @@ module.exports = { }, async fn(inputs) { - const userIds = await sails.helpers.projects.getManagerAndBoardMemberUserIds( - inputs.record.projectId, - ); + const managerUserIds = await sails.helpers.projects.getManagerUserIds(inputs.record.projectId); + const memberUserIds = await sails.helpers.boards.getMemberUserIds(inputs.record.id); + + const userIds = _.union(managerUserIds, memberUserIds); if (!_.isUndefined(inputs.values.position)) { const boards = await sails.helpers.projects.getBoards( diff --git a/server/api/helpers/projects/delete-one.js b/server/api/helpers/projects/delete-one.js index 39c832df..a73ece27 100644 --- a/server/api/helpers/projects/delete-one.js +++ b/server/api/helpers/projects/delete-one.js @@ -26,7 +26,7 @@ module.exports = { const userIds = _.union(managerUserIds, memberUserIds); userIds.forEach((userId) => { - sails.sockets.removeRoomMembersFromRooms(`user:${userId}`, boardRooms); + sails.sockets.removeRoomMembersFromRooms(`@user:${userId}`, boardRooms); sails.sockets.broadcast( `user:${userId}`, diff --git a/server/api/helpers/users/update-one.js b/server/api/helpers/users/update-one.js index 1be079a2..d1483b5a 100644 --- a/server/api/helpers/users/update-one.js +++ b/server/api/helpers/users/update-one.js @@ -123,13 +123,13 @@ module.exports = { if (user.id === inputs.user.id && inputs.request && inputs.request.isSocket) { const tempRoom = uuid(); - sails.sockets.addRoomMembersToRooms(`user:${user.id}`, tempRoom, () => { + sails.sockets.addRoomMembersToRooms(`@user:${user.id}`, tempRoom, () => { sails.sockets.leave(inputs.request, tempRoom, () => { sails.sockets.leaveAll(tempRoom); }); }); } else { - sails.sockets.leaveAll(`user:${user.id}`); + sails.sockets.leaveAll(`@user:${user.id}`); } } diff --git a/server/api/hooks/current-user/index.js b/server/api/hooks/current-user/index.js index 9531b7b0..dd295954 100644 --- a/server/api/hooks/current-user/index.js +++ b/server/api/hooks/current-user/index.js @@ -59,6 +59,10 @@ module.exports = function defineCurrentUserHook(sails) { accessToken, currentUser, }); + + if (req.isSocket) { + sails.sockets.join(req, `@user:${currentUser.id}`); + } } }