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) => { const notifications = new Map(); 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({ include: {relation: 'notification'}, where: { roleFk: { inq: roles.map(role => role.roleId), }, } }, myOptions); for (acl of availableNotifications) { notifications.set(acl.notificationFk, { id: null, notificationFk: acl.notificationFk, name: acl.notification().name, description: acl.notification().description, active: false, }); } const activeNotifications = await models.NotificationSubscription.find({ include: {relation: 'notification'}, where: {userFk: id} }, myOptions); for (subscription of activeNotifications) { const notification = notifications.get(subscription.notificationFk); if (notification) { notification.active = true; notification.id = subscription.id; } } return [...notifications.values()]; }; };