Files
monorepo/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Services/QueueServices/QueueFileOperationsService.cs
T
2026-04-27 10:50:07 -05:00

65 lines
2.3 KiB
C#

using System;
using System.Threading.Tasks;
using System.Threading;
using Newtonsoft.Json;
using Serilog;
using MassTransit;
using LCU.Library.Internal.LcuMassTransitModels;
using LCU.Library.Internal.Exceptions;
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Api.Internal.FileOperations.Services.QueueServices;
public class QueueFileOperationsService : IQueueFileOperationsService
{
private readonly ISendEndpoint _sendEndpoint;
private readonly ReceiveEndpointConfiguration _receiveEndpointConfiguration;
public QueueFileOperationsService(IBusControl busControl,
ReceiveEndpointConfiguration receiveEndpointConfiguration)
{
_receiveEndpointConfiguration = receiveEndpointConfiguration;
_sendEndpoint = busControl.GetSendEndpoint(_receiveEndpointConfiguration.ReceiveEndpointUri).Result;
}
public async Task QueueFileOperations<TRequest>(TRequest originalRequest, FileOperationType operationType) where TRequest : ReturnResponse
{
try
{
QueueRequest queueRequest = new QueueRequest()
{
ReturnResponse = originalRequest,
FileOperationType = operationType,
Request = JsonConvert.SerializeObject(originalRequest),
Attempts = 0,
QueueTimeStamp = DateTime.Now
};
await QueueFileOperationsRequest(queueRequest);
}
catch (Exception ex)
{
Log.Error(ex, $"Failed to Queue File Operations. FileOperationType: {operationType.ToString()}");
throw new ServiceException($"Failed to Queue File Operation Request. FileOperationType: {operationType.ToString()}");
}
}
public async Task QueueFileOperationsRequest(QueueRequest queueRequest)
{
try
{
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
await _sendEndpoint.Send(queueRequest, cancellationTokenSource.Token);
}
catch (TaskCanceledException exception)
{
Log.Error(exception, $"Failed to Queue File Operation Request. FileOperationType: {queueRequest.FileOperationType}");
throw new ServiceException(exception.Message);
}
catch (Exception exception)
{
Log.Error(exception, $"Failed to Queue File Operation Request. FileOperationType: {queueRequest.FileOperationType}");
throw new ServiceException($"Failed to Queue File Operation Request. FileOperationType: {queueRequest.FileOperationType}");
}
}
}