NotificationExtensions.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using System;
  2. using System.Collections.Generic;
  3. using Abp.Domain.Entities;
  4. using Abp.Threading;
  5. namespace Abp.Notifications
  6. {
  7. /// <summary>
  8. /// Extension methods for
  9. /// <see cref="INotificationSubscriptionManager"/>,
  10. /// <see cref="INotificationPublisher"/>,
  11. /// <see cref="IUserNotificationManager"/>.
  12. /// </summary>
  13. public static class NotificationExtensions
  14. {
  15. #region INotificationSubscriptionManager
  16. /// <summary>
  17. /// Subscribes to a notification.
  18. /// </summary>
  19. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  20. /// <param name="user">User.</param>
  21. /// <param name="notificationName">Name of the notification.</param>
  22. /// <param name="entityIdentifier">entity identifier</param>
  23. public static void Subscribe(this INotificationSubscriptionManager notificationSubscriptionManager, UserIdentifier user, string notificationName, EntityIdentifier entityIdentifier = null)
  24. {
  25. AsyncHelper.RunSync(() => notificationSubscriptionManager.SubscribeAsync(user, notificationName, entityIdentifier));
  26. }
  27. /// <summary>
  28. /// Subscribes to all available notifications for given user.
  29. /// It does not subscribe entity related notifications.
  30. /// </summary>
  31. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  32. /// <param name="user">User.</param>
  33. public static void SubscribeToAllAvailableNotifications(this INotificationSubscriptionManager notificationSubscriptionManager, UserIdentifier user)
  34. {
  35. AsyncHelper.RunSync(() => notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user));
  36. }
  37. /// <summary>
  38. /// Unsubscribes from a notification.
  39. /// </summary>
  40. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  41. /// <param name="user">User.</param>
  42. /// <param name="notificationName">Name of the notification.</param>
  43. /// <param name="entityIdentifier">entity identifier</param>
  44. public static void Unsubscribe(this INotificationSubscriptionManager notificationSubscriptionManager, UserIdentifier user, string notificationName, EntityIdentifier entityIdentifier = null)
  45. {
  46. AsyncHelper.RunSync(() => notificationSubscriptionManager.UnsubscribeAsync(user, notificationName, entityIdentifier));
  47. }
  48. /// <summary>
  49. /// Gets all subscribtions for given notification.
  50. /// TODO: Can work only for single database approach!
  51. /// </summary>
  52. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  53. /// <param name="notificationName">Name of the notification.</param>
  54. /// <param name="entityIdentifier">entity identifier</param>
  55. public static List<NotificationSubscription> GetSubscriptions(this INotificationSubscriptionManager notificationSubscriptionManager, string notificationName, EntityIdentifier entityIdentifier = null)
  56. {
  57. return AsyncHelper.RunSync(() => notificationSubscriptionManager.GetSubscriptionsAsync(notificationName, entityIdentifier));
  58. }
  59. /// <summary>
  60. /// Gets all subscribtions for given notification.
  61. /// </summary>
  62. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  63. /// <param name="tenantId">Tenant id. Null for the host.</param>
  64. /// <param name="notificationName">Name of the notification.</param>
  65. /// <param name="entityIdentifier">entity identifier</param>
  66. public static List<NotificationSubscription> GetSubscriptions(this INotificationSubscriptionManager notificationSubscriptionManager, int? tenantId, string notificationName, EntityIdentifier entityIdentifier = null)
  67. {
  68. return AsyncHelper.RunSync(() => notificationSubscriptionManager.GetSubscriptionsAsync(tenantId, notificationName, entityIdentifier));
  69. }
  70. /// <summary>
  71. /// Gets subscribed notifications for a user.
  72. /// </summary>
  73. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  74. /// <param name="user">User.</param>
  75. public static List<NotificationSubscription> GetSubscribedNotifications(this INotificationSubscriptionManager notificationSubscriptionManager, UserIdentifier user)
  76. {
  77. return AsyncHelper.RunSync(() => notificationSubscriptionManager.GetSubscribedNotificationsAsync(user));
  78. }
  79. /// <summary>
  80. /// Checks if a user subscribed for a notification.
  81. /// </summary>
  82. /// <param name="notificationSubscriptionManager">Notification subscription manager</param>
  83. /// <param name="user">User.</param>
  84. /// <param name="notificationName">Name of the notification.</param>
  85. /// <param name="entityIdentifier">entity identifier</param>
  86. public static bool IsSubscribed(this INotificationSubscriptionManager notificationSubscriptionManager, UserIdentifier user, string notificationName, EntityIdentifier entityIdentifier = null)
  87. {
  88. return AsyncHelper.RunSync(() => notificationSubscriptionManager.IsSubscribedAsync(user, notificationName, entityIdentifier));
  89. }
  90. #endregion
  91. #region INotificationPublisher
  92. /// <summary>
  93. /// Publishes a new notification.
  94. /// </summary>
  95. /// <param name="notificationPublisher">Notification publisher</param>
  96. /// <param name="notificationName">Unique notification name</param>
  97. /// <param name="data">Notification data (optional)</param>
  98. /// <param name="entityIdentifier">The entity identifier if this notification is related to an entity</param>
  99. /// <param name="severity">Notification severity</param>
  100. /// <param name="userIds">Target user id(s). Used to send notification to specific user(s). If this is null/empty, the notification is sent to all subscribed users</param>
  101. public static void Publish(this INotificationPublisher notificationPublisher, string notificationName, NotificationData data = null, EntityIdentifier entityIdentifier = null, NotificationSeverity severity = NotificationSeverity.Info, UserIdentifier[] userIds = null)
  102. {
  103. AsyncHelper.RunSync(() => notificationPublisher.PublishAsync(notificationName, data, entityIdentifier, severity, userIds));
  104. }
  105. #endregion
  106. #region IUserNotificationManager
  107. /// <summary>
  108. /// Gets notifications for a user.
  109. /// </summary>
  110. /// <param name="userNotificationManager">User notificaiton manager</param>
  111. /// <param name="user">User.</param>
  112. /// <param name="state">State</param>
  113. /// <param name="skipCount">Skip count.</param>
  114. /// <param name="maxResultCount">Maximum result count.</param>
  115. public static List<UserNotification> GetUserNotifications(this IUserNotificationManager userNotificationManager, UserIdentifier user, UserNotificationState? state = null, int skipCount = 0, int maxResultCount = int.MaxValue)
  116. {
  117. return AsyncHelper.RunSync(() => userNotificationManager.GetUserNotificationsAsync(user, state, skipCount: skipCount, maxResultCount: maxResultCount));
  118. }
  119. /// <summary>
  120. /// Gets user notification count.
  121. /// </summary>
  122. /// <param name="userNotificationManager">User notificaiton manager</param>
  123. /// <param name="user">User.</param>
  124. /// <param name="state">State.</param>
  125. public static int GetUserNotificationCount(this IUserNotificationManager userNotificationManager, UserIdentifier user, UserNotificationState? state = null)
  126. {
  127. return AsyncHelper.RunSync(() => userNotificationManager.GetUserNotificationCountAsync(user, state));
  128. }
  129. /// <summary>
  130. /// Gets a user notification by given id.
  131. /// </summary>
  132. /// <param name="userNotificationManager">User notificaiton manager</param>
  133. /// <param name="tenantId">Tenant Id</param>
  134. /// <param name="userNotificationId">The user notification id.</param>
  135. public static UserNotification GetUserNotification(this IUserNotificationManager userNotificationManager, int? tenantId, Guid userNotificationId)
  136. {
  137. return AsyncHelper.RunSync(() => userNotificationManager.GetUserNotificationAsync(tenantId, userNotificationId));
  138. }
  139. /// <summary>
  140. /// Updates a user notification state.
  141. /// </summary>
  142. /// <param name="userNotificationManager">User notificaiton manager</param>
  143. /// <param name="tenantId">Tenant Id</param>
  144. /// <param name="userNotificationId">The user notification id.</param>
  145. /// <param name="state">New state.</param>
  146. public static void UpdateUserNotificationState(this IUserNotificationManager userNotificationManager, int? tenantId, Guid userNotificationId, UserNotificationState state)
  147. {
  148. AsyncHelper.RunSync(() => userNotificationManager.UpdateUserNotificationStateAsync(tenantId, userNotificationId, state));
  149. }
  150. /// <summary>
  151. /// Updates all notification states for a user.
  152. /// </summary>
  153. /// <param name="userNotificationManager">User notificaiton manager</param>
  154. /// <param name="user">User.</param>
  155. /// <param name="state">New state.</param>
  156. public static void UpdateAllUserNotificationStates(this IUserNotificationManager userNotificationManager, UserIdentifier user, UserNotificationState state)
  157. {
  158. AsyncHelper.RunSync(() => userNotificationManager.UpdateAllUserNotificationStatesAsync(user, state));
  159. }
  160. /// <summary>
  161. /// Deletes a user notification.
  162. /// </summary>
  163. /// <param name="userNotificationManager">User notificaiton manager</param>
  164. /// <param name="tenantId">Tenant Id</param>
  165. /// <param name="userNotificationId">The user notification id.</param>
  166. public static void DeleteUserNotification(this IUserNotificationManager userNotificationManager, int? tenantId, Guid userNotificationId)
  167. {
  168. AsyncHelper.RunSync(() => userNotificationManager.DeleteUserNotificationAsync(tenantId, userNotificationId));
  169. }
  170. /// <summary>
  171. /// Deletes all notifications of a user.
  172. /// </summary>
  173. /// <param name="userNotificationManager">User notificaiton manager</param>
  174. /// <param name="user">The user id.</param>
  175. public static void DeleteAllUserNotifications(this IUserNotificationManager userNotificationManager, UserIdentifier user)
  176. {
  177. AsyncHelper.RunSync(() => userNotificationManager.DeleteAllUserNotificationsAsync(user));
  178. }
  179. #endregion
  180. }
  181. }