1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

feat: Log action when user is removed from card

This commit is contained in:
Maksim Eltyshev 2025-05-17 22:24:37 +02:00
parent eeb52d19bb
commit 3aedbff5d0
9 changed files with 86 additions and 17 deletions

View file

@ -76,7 +76,7 @@ module.exports = {
const isBoardMember = await sails.helpers.users.isBoardMember(user.id, board.id);
if (!isBoardMember) {
throw Errors.USER_NOT_FOUND;
throw Errors.USER_NOT_FOUND; // Forbidden
}
const cardMembership = await sails.helpers.cardMemberships.createOne

View file

@ -70,7 +70,10 @@ module.exports = {
throw Errors.USER_NOT_CARD_MEMBER;
}
const user = await User.qm.getOneById(cardMembership.userId);
cardMembership = await sails.helpers.cardMemberships.deleteOne.with({
user,
project,
board,
list,

View file

@ -142,8 +142,8 @@ module.exports = {
user: values.user,
});
if (action.type !== Action.Types.CREATE_CARD) {
if (action.type === Action.Types.ADD_MEMBER_TO_CARD) {
if (Action.INTERNAL_NOTIFIABLE_TYPES.includes(action.type)) {
if (Action.PERSONAL_NOTIFIABLE_TYPES.includes(action.type)) {
if (values.user !== action.data.user.id) {
await sails.helpers.notifications.createOne.with({
values: {
@ -195,23 +195,25 @@ module.exports = {
}),
),
);
}
}
const notificationServices = await NotificationService.qm.getByBoardId(inputs.board.id);
if (Action.EXTERNAL_NOTIFIABLE_TYPES.includes(action.type)) {
const notificationServices = await NotificationService.qm.getByBoardId(inputs.board.id);
if (notificationServices.length > 0) {
const services = notificationServices.map((notificationService) =>
_.pick(notificationService, ['url', 'format']),
);
if (notificationServices.length > 0) {
const services = notificationServices.map((notificationService) =>
_.pick(notificationService, ['url', 'format']),
);
buildAndSendNotifications(
services,
inputs.board,
values.card,
action,
values.user,
sails.helpers.utils.makeTranslator(),
);
}
buildAndSendNotifications(
services,
inputs.board,
values.card,
action,
values.user,
sails.helpers.utils.makeTranslator(),
);
}
}

View file

@ -9,6 +9,10 @@ module.exports = {
type: 'ref',
required: true,
},
user: {
type: 'ref',
required: true,
},
project: {
type: 'ref',
required: true,
@ -52,6 +56,7 @@ module.exports = {
buildData: () => ({
item: cardMembership,
included: {
users: [inputs.user],
projects: [inputs.project],
boards: [inputs.board],
lists: [inputs.list],
@ -75,6 +80,20 @@ module.exports = {
},
});
}
await sails.helpers.actions.createOne.with({
values: {
type: Action.Types.REMOVE_MEMBER_FROM_CARD,
data: {
user: _.pick(inputs.user, ['id', 'name']),
},
user: inputs.actorUser,
card: inputs.card,
},
project: inputs.project,
board: inputs.board,
list: inputs.list,
});
}
return cardMembership;

View file

@ -14,10 +14,18 @@ const Types = {
CREATE_CARD: 'createCard',
MOVE_CARD: 'moveCard',
ADD_MEMBER_TO_CARD: 'addMemberToCard',
REMOVE_MEMBER_FROM_CARD: 'removeMemberFromCard',
};
const INTERNAL_NOTIFIABLE_TYPES = [Types.MOVE_CARD, Types.ADD_MEMBER_TO_CARD];
const EXTERNAL_NOTIFIABLE_TYPES = [Types.CREATE_CARD, Types.MOVE_CARD];
const PERSONAL_NOTIFIABLE_TYPES = [Types.ADD_MEMBER_TO_CARD];
module.exports = {
Types,
INTERNAL_NOTIFIABLE_TYPES,
EXTERNAL_NOTIFIABLE_TYPES,
PERSONAL_NOTIFIABLE_TYPES,
attributes: {
// ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦ ╦╔═╗╔═╗