85 lines
3.2 KiB
C#
85 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
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.Models.Responses;
|
|
using LCU.Library.Internal.FileOperationsModels.Shared;
|
|
|
|
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
|
|
|
|
public class FileSizeService : IFileSizeService
|
|
{
|
|
|
|
public List<FileSizeResponse> GetFileSize(FileSizeRequest fileSizeRequest)
|
|
{
|
|
var fileSizeResponses = new List<FileSizeResponse>();
|
|
try
|
|
{
|
|
var requests = DynamicNameBuilder.BuildListOfRequests(fileSizeRequest);
|
|
foreach (var request in requests)
|
|
{
|
|
var response = DetermineFileSize(request);
|
|
fileSizeResponses.Add(response);
|
|
}
|
|
|
|
return fileSizeResponses;
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw new Exception($"Failed to get file size. Exception: {exception.Message}");
|
|
}
|
|
}
|
|
|
|
public decimal ConvertFileSize(decimal fileSizeInBytes, FileSizeTypes returnFileSizeType)
|
|
=> returnFileSizeType switch
|
|
{
|
|
FileSizeTypes.Byte => fileSizeInBytes,
|
|
FileSizeTypes.Kilobyte => fileSizeInBytes/1024,
|
|
FileSizeTypes.Megabyte => fileSizeInBytes/1024/1024,
|
|
FileSizeTypes.Gigabyte => fileSizeInBytes/1024/1024/1024,
|
|
FileSizeTypes.Terabyte => fileSizeInBytes/1024/1024/1024/1024,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(returnFileSizeType), $"Not expected FileSizeType value: {returnFileSizeType}"),
|
|
};
|
|
|
|
public RequestResponse PreQueueValidation(FileSizeRequest fileSizeRequest)
|
|
{
|
|
var requestResponse = new RequestResponse();
|
|
try
|
|
{
|
|
var requestList = DynamicNameBuilder.BuildListOfRequests(fileSizeRequest);
|
|
requestResponse = FileValidation.ValidateIfAnyRequest(requestList, fileSizeRequest.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;
|
|
}
|
|
}
|
|
|
|
private static RequestResponse IsRequestValid(FileSizeRequest request, RequestResponse requestResponse)
|
|
{
|
|
return FileValidation.ValidateFileExists(request.FileSourceRequest.Source, requestResponse);
|
|
}
|
|
|
|
private FileSizeResponse DetermineFileSize(FileSizeRequest request)
|
|
{
|
|
var file = new FileInfo(request.FileSourceRequest.Source);
|
|
var length = Convert.ToDecimal(file.Length);
|
|
return new FileSizeResponse
|
|
{
|
|
FileName = file.Name,
|
|
FileSize = ConvertFileSize(length, request.FileSizeType),
|
|
FileSizeType = request.FileSizeType
|
|
};
|
|
}
|
|
} |