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

111 lines
4.5 KiB
C#

using System;
using System.IO;
using LCU.Api.Internal.FileOperations.Validations;
using LCU.Library.Internal.FileOperationsModels.Enums;
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.FileOperationsModels.Models.Requests;
using LCU.Library.Internal.FileOperationsModels.Shared;
using LCU.Library.Internal.LCUServiceFactory.Configurations;
using Newtonsoft.Json;
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
public class ValidateFileSizeInRangeService : FileActionService, IFileActionService, IActionService<ValidateFileSizeInRangeRequest>
{
private readonly IFileSizeService _fileSizeService;
public ValidateFileSizeInRangeService(IFileSizeService fileSizeService,
ServicesFactoryConfiguration servicesFactoryConfiguration)
: base(servicesFactoryConfiguration)
{
_fileSizeService = fileSizeService;
}
public RequestResponse ExecuteAction(QueueRequest queueRequest)
{
var requestResponse = new RequestResponse();
try
{
var fileRequest = JsonConvert.DeserializeObject<ValidateFileSizeInRangeRequest>(queueRequest.Request);
var requests = DynamicNameBuilder.BuildListOfRequests(fileRequest);
requestResponse = FileValidation.ValidateIfAnyRequest(requests, fileRequest.FileSourceRequest.Source, requestResponse);
foreach (var request in requests)
{
var temporaryRequestResponse = PerformRequest(request);
if (temporaryRequestResponse.IsSuccessful)
{
continue;
}
requestResponse.MessageStack.AddRange(temporaryRequestResponse.MessageStack);
requestResponse.IsSuccessful = false;
}
requestResponse.ReturnResponse = fileRequest;
return requestResponse;
}
catch (Exception exception)
{
return RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse,
queueRequest.FileOperationType,
exception.Message);
}
}
public RequestResponse PerformRequest(ValidateFileSizeInRangeRequest request)
{
var requestResponse = new RequestResponse();
return ValidateFileSizeInRange(request.FileSourceRequest.Source,
request.StartFileSizeRange,
request.EndFileSizeRange,
request.FileSizeType,
requestResponse);
}
public RequestResponse PreQueueValidation(ValidateFileSizeInRangeRequest originalRequest)
{
var requestResponse = new RequestResponse();
try
{
var requestList = DynamicNameBuilder.BuildListOfRequests(originalRequest);
requestResponse = FileValidation.ValidateIfAnyRequest(requestList, originalRequest.FileSourceRequest.SourcePath, requestResponse);
foreach (var request in requestList)
{
requestResponse = IsRequestValid(request, requestResponse);
}
return requestResponse;
}
catch (Exception exception)
{
requestResponse.IsSuccessful = false;
requestResponse.MessageStack.Add(exception.Message);
return requestResponse;
}
}
public RequestResponse IsRequestValid(ValidateFileSizeInRangeRequest request, RequestResponse requestResponse)
{
requestResponse = FileValidation.ValidateFileExists(request.FileSourceRequest.Source, requestResponse);
return requestResponse;
}
private RequestResponse ValidateFileSizeInRange(string path, decimal min, decimal max,
FileSizeTypes fileSizeType,
RequestResponse requestResponse)
{
decimal fileLengthInBytes = new FileInfo(path).Length;
var fileLength = _fileSizeService.ConvertFileSize(fileLengthInBytes, fileSizeType);
if (fileLength < min || fileLength > max)
{
requestResponse.IsSuccessful = false;
requestResponse.MessageStack.Add($"File size is not in range at path {path}");
}
return requestResponse;
}
}