in src/Modules/SimplCommerce.Module.Notifications/Services/NotificationPublisher.cs [37:76]
public virtual async Task PublishAsync(
string notificationName,
NotificationData data = null,
EntityIdentifier entityIdentifier = null,
NotificationSeverity severity = NotificationSeverity.Info,
long[] userIds = null,
long[] excludedUserIds = null)
{
if (notificationName.IsNullOrEmpty())
{
throw new ArgumentException("NotificationName can not be null or whitespace!", nameof(notificationName));
}
var notificationScheme = new NotificationScheme()
{
NotificationName = notificationName,
EntityTypeName = entityIdentifier?.Type.FullName,
EntityTypeAssemblyQualifiedName = entityIdentifier?.Type.AssemblyQualifiedName,
EntityId = entityIdentifier?.Id.ToJsonString(),
Severity = severity,
UserIds = (userIds == null || userIds.Length <= 0) ? null : string.Join(",", userIds),
ExcludedUserIds = (excludedUserIds == null || excludedUserIds.Length <= 0) ? null : string.Join(",", excludedUserIds),
Data = data?.ToJsonString(),
DataTypeName = data?.GetType().AssemblyQualifiedName
};
await _notificationRepository.InsertNotificationSchemeAsync(notificationScheme);
await _notificationRepository.SaveChangesAsync(); //To get Id of the notification
if (userIds != null && userIds.Length <= MaxUserCountToDirectlyDistributeANotification)
{
//We can directly distribute the notification since there are not much receivers
await _notificationDistributer.DistributeAsync(notificationScheme.Id);
}
else
{
//We enqueue a background job since distributing may get a long time
await _backgroundJobManager.EnqueueAsync(new NotificationDistributionJobArgs(notificationScheme.Id));
}
}