salix/back/methods/notification/getList.js

76 lines
2.2 KiB
JavaScript
Raw Normal View History

2023-05-09 09:34:32 +00:00
module.exports = Self => {
Self.remoteMethod('getList', {
description: 'Get list of the available and active notification subscriptions',
accessType: 'READ',
accepts: [
{
arg: 'id',
type: 'number',
description: 'User to modify',
http: {source: 'path'}
}
],
returns: {
type: 'object',
root: true
},
http: {
path: `/:id/getList`,
verb: 'GET'
}
});
Self.getList = async(id, options) => {
2023-05-10 12:10:00 +00:00
const notifications = new Map();
2023-05-09 09:34:32 +00:00
const models = Self.app.models;
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const roles = await models.RoleMapping.find({
fields: ['roleId'],
where: {principalId: id}
}, myOptions);
const availableNotifications = await models.NotificationAcl.find({
2023-05-15 12:34:32 +00:00
fields: ['notificationFk', 'roleFk'],
2023-05-09 09:34:32 +00:00
include: {relation: 'notification'},
where: {
roleFk: {
2023-05-10 12:10:00 +00:00
inq: roles.map(role => role.roleId),
2023-05-09 09:34:32 +00:00
},
}
}, myOptions);
2023-05-11 05:18:58 +00:00
const activeNotifications = await models.NotificationSubscription.find({
2023-05-15 12:34:32 +00:00
fields: ['id', 'notificationFk'],
2023-05-11 05:18:58 +00:00
include: {relation: 'notification'},
where: {userFk: id}
}, myOptions);
2023-05-10 12:10:00 +00:00
for (acl of availableNotifications) {
notifications.set(acl.notificationFk, {
id: null,
notificationFk: acl.notificationFk,
name: acl.notification().name,
description: acl.notification().description,
active: false,
2023-05-09 09:34:32 +00:00
});
2023-05-09 12:20:20 +00:00
}
2023-05-09 09:34:32 +00:00
for (subscription of activeNotifications) {
2023-05-11 05:18:58 +00:00
notifications.set(subscription.notificationFk, {
id: subscription.id,
notificationFk: subscription.notificationFk,
name: subscription.notification().name,
description: subscription.notification().description,
active: true,
});
}
2023-05-09 09:34:32 +00:00
2023-05-10 12:10:00 +00:00
return [...notifications.values()];
2023-05-09 09:34:32 +00:00
};
};