Files
Swarm/DysonNetwork.Pusher/Services/QueueService.cs
2025-08-21 17:41:48 +08:00

61 lines
1.7 KiB
C#

using System.Text.Json;
using NATS.Client.Core;
namespace DysonNetwork.Pusher.Services;
public class QueueService(INatsConnection nats)
{
private const string QueueName = "pusher_queue";
public async Task EnqueueEmail(string toName, string toAddress, string subject, string body)
{
var message = new QueueMessage
{
Type = QueueMessageType.Email,
Data = JsonSerializer.Serialize(new EmailMessage
{
ToName = toName,
ToAddress = toAddress,
Subject = subject,
Body = body
})
};
await nats.PublishAsync(QueueName, message);
}
public async Task EnqueuePushNotification(Notification.Notification notification, Guid userId, bool isSavable = false)
{
// Update the account ID in case it wasn't set
notification.AccountId = userId;
var message = new QueueMessage
{
Type = QueueMessageType.PushNotification,
TargetId = userId.ToString(),
Data = JsonSerializer.Serialize(notification)
};
await nats.PublishAsync(QueueName, message);
}
}
public class QueueMessage
{
public QueueMessageType Type { get; set; }
public string? TargetId { get; set; }
public string Data { get; set; } = string.Empty;
}
public enum QueueMessageType
{
Email,
PushNotification
}
public class EmailMessage
{
public string ToName { get; set; } = string.Empty;
public string ToAddress { get; set; } = string.Empty;
public string Subject { get; set; } = string.Empty;
public string Body { get; set; } = string.Empty;
}