using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Abp.Notifications
{
///
/// Used to store (persist) notifications.
///
public interface INotificationStore
{
///
/// Inserts a notification subscription.
///
Task InsertSubscriptionAsync(NotificationSubscriptionInfo subscription);
///
/// Deletes a notification subscription.
///
Task DeleteSubscriptionAsync(UserIdentifier user, string notificationName, string entityTypeName, string entityId);
///
/// Inserts a notification.
///
Task InsertNotificationAsync(NotificationInfo notification);
///
/// Gets a notification by Id, or returns null if not found.
///
Task GetNotificationOrNullAsync(Guid notificationId);
///
/// Inserts a user notification.
///
Task InsertUserNotificationAsync(UserNotificationInfo userNotification);
///
/// Gets subscriptions for a notification.
///
Task> GetSubscriptionsAsync(string notificationName, string entityTypeName, string entityId);
///
/// Gets subscriptions for a notification for specified tenant(s).
///
Task> GetSubscriptionsAsync(int?[] tenantIds, string notificationName, string entityTypeName, string entityId);
///
/// Gets subscriptions for a user.
///
Task> GetSubscriptionsAsync(UserIdentifier user);
///
/// Checks if a user subscribed for a notification
///
Task IsSubscribedAsync(UserIdentifier user, string notificationName, string entityTypeName, string entityId);
///
/// Updates a user notification state.
///
Task UpdateUserNotificationStateAsync(int? tenantId, Guid userNotificationId, UserNotificationState state);
///
/// Updates all notification states for a user.
///
Task UpdateAllUserNotificationStatesAsync(UserIdentifier user, UserNotificationState state);
///
/// Deletes a user notification.
///
Task DeleteUserNotificationAsync(int? tenantId, Guid userNotificationId);
///
/// Deletes all notifications of a user.
///
Task DeleteAllUserNotificationsAsync(UserIdentifier user);
///
/// Gets notifications of a user.
///
/// User.
/// Skip count.
/// Maximum result count.
/// State
Task> GetUserNotificationsWithNotificationsAsync(UserIdentifier user, UserNotificationState? state = null, int skipCount = 0, int maxResultCount = int.MaxValue);
///
/// Gets user notification count.
///
/// User.
/// The state.
Task GetUserNotificationCountAsync(UserIdentifier user, UserNotificationState? state = null);
///
/// Gets a user notification.
///
/// Tenant Id
/// Skip count.
Task GetUserNotificationWithNotificationOrNullAsync(int? tenantId, Guid userNotificationId);
///
/// Inserts notification for a tenant.
///
Task InsertTenantNotificationAsync(TenantNotificationInfo tenantNotificationInfo);
///
/// Deletes the notification.
///
/// The notification.
Task DeleteNotificationAsync(NotificationInfo notification);
}
}