65 lines
2.3 KiB
C#
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}");
|
|
}
|
|
}
|
|
} |