|
|
|
|
@ -42,7 +42,7 @@ export class BannerService extends ServiceClassInternal implements IBannerServic |
|
|
|
|
throw new Error('error-creating-banner'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void api.broadcast('banner.new', banner._id); |
|
|
|
|
void this.sendToUsers(banner); |
|
|
|
|
|
|
|
|
|
return banner; |
|
|
|
|
} |
|
|
|
|
@ -123,9 +123,38 @@ export class BannerService extends ServiceClassInternal implements IBannerServic |
|
|
|
|
|
|
|
|
|
const { _id, ...banner } = result; |
|
|
|
|
|
|
|
|
|
await Banners.updateOne({ _id }, { $set: { ...banner, ...doc, active: true } }); // reenable the banner
|
|
|
|
|
const newBanner = { ...banner, ...doc, active: true }; |
|
|
|
|
|
|
|
|
|
await Banners.updateOne({ _id }, { $set: newBanner }); // reenable the banner
|
|
|
|
|
|
|
|
|
|
void this.sendToUsers({ _id, ...newBanner }); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async sendToUsers(banner: IBanner): Promise<boolean> { |
|
|
|
|
if (!banner.active) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// no roles set, so it should be sent to all users
|
|
|
|
|
if (!banner.roles?.length) { |
|
|
|
|
void api.broadcast('banner.enabled', banner._id); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const total = await Users.countActiveUsersInRoles(banner.roles); |
|
|
|
|
|
|
|
|
|
// if more than 100 users should receive the banner, send it to all users
|
|
|
|
|
if (total > 100) { |
|
|
|
|
void api.broadcast('banner.enabled', banner._id); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
await Users.findActiveUsersInRoles(banner.roles, { projection: { _id: 1 } }).forEach((user) => { |
|
|
|
|
void api.broadcast('banner.user', user._id, banner); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
void api.broadcast('banner.enabled', bannerId); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|