Updating
This commit is contained in:
+87
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Serilog;
|
||||
using LCU.Library.Internal.ApiResponse.Services;
|
||||
using LCU.Library.Internal.Exceptions;
|
||||
using LCU.Library.Internal.FileOperationsModels.Models;
|
||||
using LCU.Library.Internal.LCUServiceFactory.Services;
|
||||
using LCU.Api.Internal.FileOperations.Services.QueueServices;
|
||||
using LCU.Api.Internal.FileOperations.Services.FileActionServices;
|
||||
using LCU.Api.Internal.FileOperations.Configurations;
|
||||
namespace LCU.Api.Internal.FileOperations.Services;
|
||||
|
||||
public class FileOperationsService : IFileOperationsService
|
||||
{
|
||||
private readonly IQueueFileOperationsService _queueFileOperationsService;
|
||||
private readonly ApiConfiguration _apiConfiguration;
|
||||
|
||||
private readonly ILcuServiceFactory<IFileActionService> _lcuServiceFactory;
|
||||
|
||||
public FileOperationsService(IQueueFileOperationsService queueFileOperationsService,
|
||||
ApiConfiguration apiConfiguration,
|
||||
ILcuServiceFactory<IFileActionService> lcuServiceFactory)
|
||||
{
|
||||
_queueFileOperationsService = queueFileOperationsService;
|
||||
_apiConfiguration = apiConfiguration;
|
||||
_lcuServiceFactory = lcuServiceFactory;
|
||||
}
|
||||
|
||||
public async Task HandleFileOperationsRequest(QueueRequest queueRequest)
|
||||
{
|
||||
var result = PerformFileOperation(queueRequest);
|
||||
|
||||
if (ShouldPerformFileOperationsAgain(queueRequest, result))
|
||||
{
|
||||
Log.Information($"Attempting to requeue file operations request. Request: {JsonConvert.SerializeObject(queueRequest)}");
|
||||
queueRequest.Attempts++;
|
||||
await _queueFileOperationsService.QueueFileOperationsRequest(queueRequest);
|
||||
return;
|
||||
}
|
||||
|
||||
await QueueReturnResponse.QueueResponse(queueRequest.ReturnResponse, result.IsSuccessful, result.MessageStack);
|
||||
|
||||
if (!result.IsSuccessful)
|
||||
{
|
||||
var errorMessage = String.Join("; ", result.MessageStack.ToArray());
|
||||
throw new ServiceException($"File Operation Request was not successful. MessageStack:{errorMessage}");
|
||||
}
|
||||
}
|
||||
|
||||
public RequestResponse PerformFileOperation(QueueRequest queueRequest)
|
||||
{
|
||||
var requestResponse = new RequestResponse();
|
||||
try
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(queueRequest);
|
||||
|
||||
var fileActionService = _lcuServiceFactory.GetService(queueRequest.FileOperationType);
|
||||
|
||||
return fileActionService.ExecuteAction(queueRequest);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
var failureMessage = $"Failed to perform file operations.";
|
||||
Log.Error(exception, failureMessage);
|
||||
|
||||
var fileOperationType = queueRequest?.FileOperationType;
|
||||
if (fileOperationType == null)
|
||||
{
|
||||
requestResponse.MessageStack.Add($"{failureMessage}. FileOperationType is Null. " +
|
||||
$"ExceptionMessage: {exception.Message}");
|
||||
return requestResponse;
|
||||
}
|
||||
|
||||
requestResponse = RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse, queueRequest.FileOperationType, exception.Message);
|
||||
|
||||
return requestResponse;
|
||||
}
|
||||
}
|
||||
|
||||
public bool ShouldPerformFileOperationsAgain(QueueRequest request, RequestResponse requestResponse)
|
||||
{
|
||||
return !requestResponse.IsSuccessful &&
|
||||
request.Attempts != null &&
|
||||
request.Attempts < _apiConfiguration.AttemptsLimit;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user