62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Text.Json;
 | |
| using DysonNetwork.Shared.Proto;
 | |
| using NATS.Client.Core;
 | |
| 
 | |
| namespace DysonNetwork.Ring.Services;
 | |
| 
 | |
| public class QueueService(INatsConnection nats)
 | |
| {
 | |
|     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
 | |
|             })
 | |
|         };
 | |
|         var rawMessage = GrpcTypeHelper.ConvertObjectToByteString(message).ToByteArray();
 | |
|         await nats.PublishAsync(QueueBackgroundService.QueueName, rawMessage);
 | |
|     }
 | |
| 
 | |
|     public async Task EnqueuePushNotification(Shared.Models.SnNotification 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)
 | |
|         };
 | |
|         var rawMessage = GrpcTypeHelper.ConvertObjectToByteString(message).ToByteArray();
 | |
|         await nats.PublishAsync(QueueBackgroundService.QueueName, rawMessage);
 | |
|     }
 | |
| }
 | |
| 
 | |
| 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;
 | |
| }
 |