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

85 lines
3.3 KiB
C#

using System;
using System.Linq;
using Newtonsoft.Json;
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.LCUServiceFactory.Configurations;
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
public class BulkOperationService<TRequest> : FileActionService, IFileActionService, IActionService<BulkOperationRequest<TRequest>>
{
private readonly IActionService<TRequest> _actionService;
public BulkOperationService(ServicesFactoryConfiguration servicesFactoryConfiguration, IActionService<TRequest> actionService)
: base(servicesFactoryConfiguration)
{
_actionService = actionService;
}
/// <summary>
/// Bulk Operations was created to always try. This meaning that it should try to attempt
/// every operation action. This also means that it will alway try to also return response and
/// that it always returns true (Exeption being catastrophic exeption thrown).
/// </summary>
/// <param name="queueRequest"></param>
/// <returns></returns>
public RequestResponse ExecuteAction(QueueRequest queueRequest)
{
var requestResponse = new RequestResponse();
try
{
var request = JsonConvert.DeserializeObject<BulkOperationRequest<TRequest>>(queueRequest.Request);
requestResponse = PerformRequest(request);
//Bulk Operations just tries so if it gets to this point its sucessful.
requestResponse.IsSuccessful = true;
requestResponse.ReturnResponse = request;
return requestResponse;
}
catch (Exception exception)
{
return RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse,
queueRequest.FileOperationType,
exception.Message);
}
}
public RequestResponse PerformRequest(BulkOperationRequest<TRequest> request)
{
return BulkOperation(request);
}
private RequestResponse BulkOperation(BulkOperationRequest<TRequest> request)
{
var finalRequestResponse = new RequestResponse();
foreach (var operationRequest in request.OperationRequests)
{
var requestResponse = _actionService.PerformRequest(operationRequest);
if (!requestResponse.IsSuccessful)
{
finalRequestResponse.IsSuccessful = requestResponse.IsSuccessful;
finalRequestResponse.MessageStack.AddRange(requestResponse.MessageStack);
}
}
return finalRequestResponse;
}
public RequestResponse PreQueueValidation(BulkOperationRequest<TRequest> originalRequest)
{
var requestResponse = new RequestResponse();
requestResponse = IsRequestValid(originalRequest, requestResponse);
return requestResponse;
}
public RequestResponse IsRequestValid(BulkOperationRequest<TRequest> request, RequestResponse requestResponse)
{
var anyOperationRequests = request.OperationRequests.Any();
if (!anyOperationRequests)
{
requestResponse.IsSuccessful = anyOperationRequests;
requestResponse.MessageStack.Add($"There are no bulk operation requests to perform.");
}
return requestResponse;
}
}