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

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
};
}
}