♻️ Refactored the queue
This commit is contained in:
61
DysonNetwork.Pusher/Services/QueueService.cs
Normal file
61
DysonNetwork.Pusher/Services/QueueService.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user