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

109 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using LCU.Library.Internal.LCUServiceFactory.Configurations;
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.FileOperationsModels.Shared;
using LCU.Library.Internal.FileOperationsModels.Enums;
using LCU.Api.Internal.FileOperations.Validations;
using LCU.Library.Internal.FileOperationsModels.Models.Requests;
using Microsoft.OpenApi.Extensions;
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
public class ValidateFileService : FileActionService, IFileActionService, IActionService<ValidateFileRequest>
{
public ValidateFileService(ServicesFactoryConfiguration servicesFactoryConfiguration)
: base(servicesFactoryConfiguration)
{
}
public RequestResponse ExecuteAction(QueueRequest queueRequest)
{
var requestResponse = new RequestResponse();
try
{
var fileRequest = JsonConvert.DeserializeObject<ValidateFileRequest>(queueRequest.Request);
var requests = DynamicNameBuilder.BuildListOfRequests(fileRequest);
if (fileRequest.FileDoesExist)
{
requestResponse = FileValidation.ValidateIfAnyRequest(requests, fileRequest.FileSourceRequest.Source, requestResponse);
}
if (fileRequest.CheckFileCount)
{
if (!ValidateFileCount(fileRequest, requests))
{
requestResponse.MessageStack.Add($"The file count condition returned false: {requests.Count} {fileRequest.OperatorType.GetDisplayName()} {fileRequest.FileCount} ");
requestResponse.IsSuccessful = false;
}
}
requestResponse = PerformRequests(requests, requestResponse);
requestResponse.ReturnResponse = fileRequest;
return requestResponse;
}
catch (Exception exception)
{
return RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse,
queueRequest.FileOperationType,
exception.Message);
}
}
public bool ValidateFileCount(ValidateFileRequest fileRequest, List<ValidateFileRequest> requests)
=> fileRequest.OperatorType switch
{
OperatorTypes.Equals => (requests.Count == fileRequest.FileCount),
OperatorTypes.GreaterThan => (requests.Count > fileRequest.FileCount),
OperatorTypes.GreaterThanEquals => (requests.Count >= fileRequest.FileCount ),
OperatorTypes.LessThan => (requests.Count < fileRequest.FileCount),
OperatorTypes.LessThanEquals => (requests.Count <= fileRequest.FileCount ),
_ => throw new ArgumentOutOfRangeException(nameof(fileRequest.OperatorType), $"Not expected OperatorType value: {fileRequest.OperatorType}"),
};
public RequestResponse PerformRequests(List<ValidateFileRequest> requests, RequestResponse requestResponse)
{
foreach (var request in requests)
{
var temporaryRequestResponse = PerformRequest(request);
if (!temporaryRequestResponse.IsSuccessful)
{
requestResponse.MessageStack.AddRange(temporaryRequestResponse.MessageStack);
requestResponse.IsSuccessful = false;
}
}
return requestResponse;
}
public RequestResponse PerformRequest(ValidateFileRequest request)
{
var requestResponse = new RequestResponse();
if (request.FileDoesExist)
{
return FileValidation.ValidateFileExists(request.FileSourceRequest.Source, requestResponse);
}
return FileValidation.ValidateFileNotExists(request.FileSourceRequest.Source, requestResponse);
}
public RequestResponse PreQueueValidation(ValidateFileRequest originalRequest)
{
var requestResponse = new RequestResponse();
requestResponse = IsRequestValid(originalRequest, requestResponse);
return requestResponse;
}
public RequestResponse IsRequestValid(ValidateFileRequest request, RequestResponse requestResponse)
{
requestResponse = FileValidation.ValidateSourceNotEmpty(request.FileSourceRequest.SourceFile, requestResponse);
requestResponse = FileValidation.ValidateFilenameNotEmpty(request.FileSourceRequest.SourceFile, requestResponse);
requestResponse = FileValidation.ValidateFilename(request.FileSourceRequest.SourceFile, requestResponse);
return requestResponse;
}
}