111 lines
4.5 KiB
C#
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;
|
|
}
|
|
} |