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 GetFileSize(FileSizeRequest fileSizeRequest) { var fileSizeResponses = new List(); 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 }; } }