This commit is contained in:
Zeeshaun
2026-04-27 10:50:07 -05:00
parent 8b528fa00b
commit b5edd55420
141 changed files with 9602 additions and 0 deletions
@@ -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;
}
}