namespace IronServices.Client;
///
/// API client for IronNotify operations.
/// Access via IronServicesClient.Notify
///
public class NotifyApi
{
private readonly IronServicesClient _client;
private readonly string _baseUrl;
internal NotifyApi(IronServicesClient client, string baseUrl)
{
_client = client;
_baseUrl = baseUrl;
}
private string Url(string endpoint) => IronServicesClient.BuildUrl(_baseUrl, endpoint);
#region Notifications
///
/// Get notifications for the current user.
///
public async Task> GetNotificationsAsync(string? appSlug = null, bool unreadOnly = false, int page = 1, int pageSize = 50, CancellationToken ct = default)
{
var query = new List { $"page={page}", $"pageSize={pageSize}" };
if (unreadOnly) query.Add("isRead=false");
if (!string.IsNullOrEmpty(appSlug)) query.Add($"type={appSlug}");
var queryString = "?" + string.Join("&", query);
var result = await _client.GetAsync(Url($"api/v1/notifications{queryString}"), ct);
return result?.Notifications ?? [];
}
///
/// Get unread notification count.
///
public async Task GetUnreadCountAsync(CancellationToken ct = default)
{
var result = await _client.GetAsync(Url("api/v1/notifications/unread-count"), ct);
return result?.Count ?? result?.UnreadCount ?? 0;
}
///
/// Mark a notification as read.
///
public async Task MarkAsReadAsync(Guid notificationId, CancellationToken ct = default)
{
await _client.PutAsync