85 lines
3.3 KiB
C#
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;
|
|
}
|
|
} |