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 : FileActionService, IFileActionService, IActionService> { private readonly IActionService _actionService; public BulkOperationService(ServicesFactoryConfiguration servicesFactoryConfiguration, IActionService actionService) : base(servicesFactoryConfiguration) { _actionService = actionService; } /// /// 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). /// /// /// public RequestResponse ExecuteAction(QueueRequest queueRequest) { var requestResponse = new RequestResponse(); try { var request = JsonConvert.DeserializeObject>(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 request) { return BulkOperation(request); } private RequestResponse BulkOperation(BulkOperationRequest 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 originalRequest) { var requestResponse = new RequestResponse(); requestResponse = IsRequestValid(originalRequest, requestResponse); return requestResponse; } public RequestResponse IsRequestValid(BulkOperationRequest 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; } }