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
|
|
|
|
2023-05-10 12:13:38 +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-10 12:13:38 +00:00
|
|
|
}
|
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
|
|
|
};
|
|
|
|
};
|