This commit is contained in:
Zeeshaun
2026-04-27 10:50:07 -05:00
parent 8b528fa00b
commit b5edd55420
141 changed files with 9602 additions and 0 deletions
@@ -0,0 +1,71 @@
using System.Collections.Generic;
namespace LCU.Library.Internal.FileOperationsModels.Constants;
public static class IndexEvaluationRequestVariablesConsts
{
public static readonly List<string> IndexEvaluationRequestVariablesConstValues = new()
{
InputFieldZero,
InputFieldOne,
InputFieldTwo,
InputFieldThree,
InputFieldFour,
InputFieldFive,
InputFieldSix,
InputFieldSeven,
InputFieldEight,
InputFieldNine,
InputFieldTen,
InputFieldEleven,
InputFieldTwelve,
InputFieldThirteen,
InputFieldFourteen,
InputFieldFifteen,
InputFieldSixteen,
InputFieldSeventeen,
InputFieldEighteen,
InputFieldNineteen,
InputFieldTwenty,
InputFieldTwentyOne,
InputFieldTwentyTwo,
InputFieldTwentyThree,
InputFieldTwentyFour,
InputFieldTwentyFive,
InputFieldTwentySix,
InputFieldTwentySeven,
InputFieldTwentyEight,
InputFieldTwentyNine
};
public const string InputFieldZero = "InputFieldZero";
public const string InputFieldOne = "InputFieldOne";
public const string InputFieldTwo = "InputFieldTwo";
public const string InputFieldThree = "InputFieldThree";
public const string InputFieldFour = "InputFieldFour";
public const string InputFieldFive = "InputFieldFive";
public const string InputFieldSix = "InputFieldSix";
public const string InputFieldSeven = "InputFieldSeven";
public const string InputFieldEight = "InputFieldEight";
public const string InputFieldNine = "InputFieldNine";
public const string InputFieldTen = "InputFieldTen";
public const string InputFieldEleven = "InputFieldEleven";
public const string InputFieldTwelve = "InputFieldTwelve";
public const string InputFieldThirteen = "InputFieldThirteen";
public const string InputFieldFourteen = "InputFieldFourteen";
public const string InputFieldFifteen = "InputFieldFifteen";
public const string InputFieldSixteen = "InputFieldSixteen";
public const string InputFieldSeventeen = "InputFieldSeventeen";
public const string InputFieldEighteen = "InputFieldEighteen";
public const string InputFieldNineteen = "InputFieldNineteen";
public const string InputFieldTwenty = "InputFieldTwenty";
public const string InputFieldTwentyOne = "InputFieldTwentyOne";
public const string InputFieldTwentyTwo = "InputFieldTwentyTwo";
public const string InputFieldTwentyThree = "InputFieldTwentyThree";
public const string InputFieldTwentyFour = "InputFieldTwentyFour";
public const string InputFieldTwentyFive = "InputFieldTwentyFive";
public const string InputFieldTwentySix = "InputFieldTwentySix";
public const string InputFieldTwentySeven = "InputFieldTwentySeven";
public const string InputFieldTwentyEight = "InputFieldTwentyEight";
public const string InputFieldTwentyNine = "InputFieldTwentyNine";
}
@@ -0,0 +1,12 @@
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Enums;
public enum Delimiters
{
[Display(Name = ",")]
Comma,
[Display(Name = "|")]
Pipe
}
@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Enums;
public enum FileSizeTypes
{
[Display(Name = "bytes")]
Byte = 0,
[Display(Name = "KB")]
Kilobyte = 1,
[Display(Name = "MB")]
Megabyte = 2,
[Display(Name = "GB")]
Gigabyte = 3,
[Display(Name = "TB")]
Terabyte = 4
}
@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Enums;
public enum OperatorTypes
{
[Display(Name = "=")]
Equals = 0,
[Display(Name = ">")]
GreaterThan = 1,
[Display(Name = "=>")]
GreaterThanEquals = 2,
[Display(Name = "<")]
LessThan = 3,
[Display(Name = "<=")]
LessThanEquals = 4
}
@@ -0,0 +1,119 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0; netstandard2.1; net6.0; net8.0</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<LangVersion>latest</LangVersion>
<Version>4.1.5</Version>
<Description>
2.0.0 - Addition of ReturnResponse and QueueReturnResponse from the LCU.Library.Internal.ApiResponse
2.1.0 - Upgrade of ApiResponse and QueueLib Version
2.2.0 - Addition of ZipDirectoryRequest
3.0.0 - Creation of FileNameSettings and adding it to copy, delete, move, and rename models.
3.1.0 - Added CreateDirectory and RenameDirectory request.
3.2.0 - Addition of the RegexSettings for the Copy, Delete, and Move file operation.
3.3.0 - Added NameSettings for RenameFile NewFileName field.
3.4.0 - Fix to check for no Regex settings. Addition of NoFilesExist validation.
3.6.0 - New BulkOperationsRequest
3.7.0 - MoveFileRequest and CopyFileRequest now use FileRequest. Added generic method to BuildListOfRequest
3.7.1 - Added DynamicfileListRequest model.
3.8.0 - Upgrade of ApiResponse and QueueLib.
3.9.0 - New UnzipFile functionality.
3.10.0 - Dynamic Zip and Unzip Functionality.
3.11.0 - Add File Data Encryption/Decryption Actions.
3.12.0 - Add SucceedOnError to Copy/Rename/Move/Delete File
3.13.0 - Additions to RequestResponse, Added netstandard2.1 and net6.0, fix for regex directory name builder, and changed validation to return RequestResponse
3.14.0 - Upgrade ApiResponse Models Library
3.15.0 - Upgrade ApiResponse to use newest models version. With queueName obsolete.
3.16.0 - Add Modify File Model.
3.17.0 - Addition of ParsePdfRequest and moving FileRequestValidation to Obsolete as it should not be used by outside apis.
3.18.0 - New UnzipPasswordProtectedFile functionality.
3.19.0 - Add DynamicDate Source/Destination paths for Unzip and UnzipPasswordProtected. Added BuildDynamicDirectoryList functionality.
3.20.0 - Add UseZipFileNameAsFinalDestination Property to the UnzipFileRequest model
3.21.0 - Add BatchParsePdfRequest
3.22.0 - Add WriteFileRequest
3.23.0 - Add DeleteDirectoryRequest
3.24.0 - Alter ModifyFile to change extensions
3.25.0 - Add ValidateFileRequest
3.26.0 - Removed SucceedOnError field from ValidateFileRequest
3.27.0 - Added values to UnzipFileRequest model to handle flattening file structure
3.28.0 - Added ExcelModels
3.29.0 - ExcelModels modifications for the use of OpenXml enhancment
3.30.0 - Added MaxAmountOfFiles field to ModifyFileRequest
3.30.1 - Added HtmlToPdfModels
3.30.2 - Add AppendFile
3.30.3 - Add ExtractIndexFileData
3.30.4 - Edit IndexEvaluationRequest
3.30.5 - Upgrade NuGets
3.30.6 - Change ExcelDataRequest.FilePath to ExcelDataRequest.FileContent
3.31.0 - Upgrade to dotnet8
4.0.0 - Updated project name
4.1.1 - Added DeleteEmptyDirectoryRequest
4.1.2 - Added ValidateFizeSizeInRangeRequest and FileSiseRequest
4.1.3 - Update FileSourceRequest
4.1.4 - Update ValidateFileRequest to add CheckFileCount Property and added new enum OperatorTypes
4.1.5 - QueueRequest update to add ReturnResponse
</Description>
<PackageReleaseNotes>
2.0.0 - Addition of ReturnResponse and QueueReturnResponse from the LCU.Library.Internal.ApiResponse
2.1.0 - Upgrade of ApiResponse and QueueLib Version
2.2.0 - Addition of ZipDirectoryRequest
3.0.0 - Creation of FileNameSettings and adding it to copy, delete, move, and rename models.
3.1.0 - Added CreateDirectory and RenameDirectory request.
3.2.0 - Addition of the RegexSettings for the Copy, Delete, and Move file operation.
3.3.0 - Added NameSettings for RenameFile NewFileName field.
3.4.0 - Fix to check for no Regex settings. Addition of NoFilesExist validation.
3.6.0 - New BulkOperationsRequest
3.7.0 - MoveFileRequest and CopyFileRequest now use FileRequest. Added generic method to BuildListOfRequest
3.7.1 - Added DynamicfileListRequest model.
3.8.0 - Upgrade of ApiResponse and QueueLib.
3.9.0 - New UnzipFile functionality.
3.10.0 - Dynamic Zip and Unzip Functionality.
3.11.0 - Add File Data Encryption/Decryption Actions.
3.12.0 - Add SucceedOnError to Copy/Rename/Move/Delete File
3.13.0 - Additions to RequestResponse, Added netstandard2.1 and net6.0, fix for regex directory name builder, and changed validation to return RequestResponse
3.14.0 - Upgrade ApiResponse Models Library
3.15.0 - Upgrade ApiResponse to use newest models version. With queueName obsolete.
3.16.0 - Add Modify File Model.
3.17.0 - Addition of ParsePdfRequest and moving FileRequestValidation to Obsolete as it should not be used by outside apis.
3.18.0 - New UnzipPasswordProtectedFile functionality.
3.19.0 - Add DynamicDate Source/Destination paths for Unzip and UnzipPasswordProtected. Added BuildDynamicDirectoryList functionality.
3.20.0 - Add UseZipFileNameAsFinalDestination Property to the UnzipFileRequest model
3.21.0 - Add BatchParsePdfRequest
3.22.0 - Add WriteFileRequest
3.23.0 - Add DeleteDirectoryRequest
3.24.0 - Alter ModifyFile to change extensions
3.25.0 - Add ValidateFileRequest
3.26.0 - Removed SucceedOnError field from ValidateFileRequest
3.27.0 - Added values to UnzipFileRequest model to handle flattening file structure
3.28.0 - Added ExcelModels
3.29.0 - ExcelModels modifications for the use of OpenXml enhancment
3.30.0 - Added MaxAmountOfFiles field to ModifyFileRequest
3.30.1 - Added HtmlToPdfModels
3.30.2 - Add AppendFile
3.30.3 - Add ExtractIndexFileData
3.30.4 - Edit IndexEvaluationRequest
3.30.5 - Upgrade NuGets
3.30.6 - Change ExcelDataRequest.FilePath to ExcelDataRequest.FileContent
3.31.0 - Upgrade to dotnet8
4.0.0 - Updated project name
4.1.1 - Added DeleteEmptyDirectoryRequest
4.1.2 - Added ValidateFizeSizeInRangeRequest and FileSiseRequest
4.1.3 - Update FileSourceRequest
4.1.4 - Update ValidateFileRequest to add CheckFileCount Property and added new enum OperatorTypes
4.1.5 - QueueRequest update to add ReturnResponse
</PackageReleaseNotes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LCU.Library.Internal.ApiResponse.Models" Version="3.3.0" />
<PackageReference Include="LCU.Library.Internal.LcuEvaluationModels" Version="2.0.0" />
<PackageReference Include="LCU.Library.Internal.LcuMassTransit" Version="1.0.0" />
<PackageReference Include="LCU.Library.Internal.LcuMassTransitModels" Version="1.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="SharpZipLib" Version="1.3.3" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>
</Project>
@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class AppendFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
[Required(ErrorMessage = "FileName is required.")]
public string FileName { get; set; }
[Required(ErrorMessage = "Extension is required.")]
public string Extension { get; set; }
[Required(ErrorMessage = "FileData is required.")]
public string FileData { get; set; }
[NotMapped]
public string FullFilePath
{
get
{
return DestinationPath.EndsWith("\\") ? $"{DestinationPath}{FileNameWithExtension}" : $"{DestinationPath}\\{FileNameWithExtension}";
}
}
[NotMapped]
public string FileNameWithExtension
{
get
{
return Extension.StartsWith(".") ? $"{FileName}{Extension}" : $"{FileName}.{Extension}";
}
}
}
}
@@ -0,0 +1,64 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class BatchParsePdfRequest : ReturnResponse
{
private string rootPath;
[Required(AllowEmptyStrings = false)]
public string RootPath
{
get
{
return rootPath;
}
set
{
rootPath = string.IsNullOrWhiteSpace(value) || value.EndsWith("\\") ? value : $"{value}\\";
}
}
[Required(AllowEmptyStrings = false)]
public string PdfName { get; set; }
public List<BatchPdf> BatchPdfs { get; set; }
[NotMapped]
public string FullPdfPath
{
get
{
return RootPath + PdfName;
}
}
}
public class BatchPdf
{
private string parsedPdfname;
[Required]
[Range(1, int.MaxValue, ErrorMessage = "PageStart must be larger then 0.")]
public int PageStart { get; set; }
[Required]
[Range(1, int.MaxValue, ErrorMessage = "PageStop must be larger then 0.")]
public int PageStop { get; set; }
public string ParsedPdfname
{
get
{
return parsedPdfname;
}
set
{
parsedPdfname = value.ToLower().EndsWith(".pdf") || string.IsNullOrWhiteSpace(value) ? value : $"{value}.pdf";
}
}
}
}
@@ -0,0 +1,10 @@
using System.Collections.Generic;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class BulkOperationRequest<TRequest> : ReturnResponse
{
public List<TRequest> OperationRequests { get; set; }
}
}
@@ -0,0 +1,7 @@
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class CopyFileRequest : FileRequest
{
}
}
@@ -0,0 +1,38 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class CreateDirectoryRequest : ReturnResponse
{
[Required(ErrorMessage = "Directory name is required.")]
public string DirectoryName { get; set; }
[Required(ErrorMessage = "Directory path is required")]
public string DirectoryPath { get; set; }
public DynamicNameSetting NameSetting { get; set; }
[NotMapped]
public string FinalDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(DirectoryName, NameSetting);
}
}
[NotMapped]
public string DirectoryDestination
{
get
{
var finalDestinationPath = DirectoryPath.EndsWith("\\") ? DirectoryPath : $"{DirectoryPath}\\";
return $"{finalDestinationPath}{FinalDirectoryName}";
}
}
}
}
@@ -0,0 +1,72 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.IO;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DecryptFileDataRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; }
[Required(ErrorMessage = "Key source path is required")]
public string KeySourcePath { get; set; }
[Required(ErrorMessage = "Key source file is required")]
public string KeySourceFile { get; set; }
[Required(ErrorMessage = "PassPhrase is required")]
public string PassPhrase { get; set; }
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
public string DestinationFile { get; set; }
public bool Overwrite { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
[NotMapped] public string FinalSourceFile => DynamicNameBuilder.BuildDynamicName(SourceFile, FileNameSetting);
[NotMapped]
public string Source
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
finalSourcePath = Path.Combine(finalSourcePath, FinalSourceFile);
return finalSourcePath;
}
}
[NotMapped]
public string Destination
{
get
{
var finalDestinationPath = DestinationPath.EndsWith("\\") ? DestinationPath : $"{DestinationPath}\\";
var finalDestinationFileName = string.IsNullOrWhiteSpace(DestinationFile) ? SourceFile : DestinationFile;
finalDestinationPath = Path.Combine(finalDestinationPath, Path.GetFileNameWithoutExtension(finalDestinationFileName));
return finalDestinationPath;
}
}
[NotMapped]
public string KeySource
{
get
{
var finalKeyPath = KeySourcePath.EndsWith("\\") ? KeySourcePath : $"{KeySourcePath}\\";
finalKeyPath = Path.Combine(finalKeyPath, KeySourceFile);
return finalKeyPath;
}
}
}
}
@@ -0,0 +1,42 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DeleteDirectoryRequest : ReturnResponse
{
[Required(ErrorMessage = "Directory name is required.")]
public string DirectoryName { get; set; }
[Required(ErrorMessage = "Directory path is required")]
public string DirectoryRootPath { get; set; }
[Range(0, 25, ErrorMessage = "MaxAmountOfDirectories must be between {1} and {2}.")]
public int MaxAmountOfDirectories { get; set; } = 0;
public bool Recursive { get; set; }
public DynamicNameSetting DirectoryNameSettings { get; set; }
[NotMapped]
public string FinalDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(DirectoryName, DirectoryNameSettings);
}
}
[NotMapped]
public string FinalDirectoryPath
{
get
{
return $"{DirectoryRootPath}\\{FinalDirectoryName}";
}
}
}
}
@@ -0,0 +1,37 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DeleteEmptyDirectoryRequest : ReturnResponse
{
[Required(ErrorMessage = "Sub directory path is required.")]
public string SubDirectoryPath { get; set; }
[Required(ErrorMessage = "Dynamic directory name is required")]
public string DynamicDirectoryName { get; set; }
public DynamicNameSetting DirectoryNameSettings { get; set; }
[NotMapped]
public string FinalDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(DynamicDirectoryName, DirectoryNameSettings);
}
}
[NotMapped]
public string FinalDirectoryPath
{
get
{
return SubDirectoryPath.EndsWith("\\") ? $"{SubDirectoryPath}{FinalDirectoryName}" : $"{SubDirectoryPath}\\{FinalDirectoryName}";
}
}
}
}
@@ -0,0 +1,39 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DeleteFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
public bool SucceedOnError { get; set; }
[NotMapped]
public string FinalSourceFile
{
get
{
return DynamicNameBuilder.BuildDynamicName(SourceFile, FileNameSetting);
}
}
[NotMapped]
public string Source
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + FinalSourceFile;
}
}
}
}
@@ -0,0 +1,14 @@
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DynamicDirectoryListRequest
{
[Required(ErrorMessage = "Path is required")]
public string Path { get; set; }
[Required(ErrorMessage = "Dynamic Directory Name is required")]
public string DynamicDirectoryName { get; set; }
public DynamicNameSetting DynamicFileSettings { get; set; }
}
}
@@ -0,0 +1,11 @@
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class DynamicFileListRequest
{
public string Path { get; set; }
public string Filename { get; set; }
public DynamicNameSetting DynamicFileSettings { get; set; }
}
}
@@ -0,0 +1,66 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.IO;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class EncryptFileDataRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; }
[Required(ErrorMessage = "Key source path is required")]
public string KeySourcePath { get; set; }
[Required(ErrorMessage = "Key source file is required")]
public string KeySourceFile { get; set; }
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
public bool Overwrite { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
[NotMapped] public string FinalSourceFile => DynamicNameBuilder.BuildDynamicName(SourceFile, FileNameSetting);
[NotMapped]
public string Source
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
finalSourcePath = Path.Combine(finalSourcePath, FinalSourceFile);
return finalSourcePath;
}
}
[NotMapped]
public string Destination
{
get
{
var finalDestinationPath = DestinationPath.EndsWith("\\") ? DestinationPath : $"{DestinationPath}\\";
finalDestinationPath = Path.Combine(finalDestinationPath, Path.GetFileNameWithoutExtension(FinalSourceFile)) + ".pgp";
return finalDestinationPath;
}
}
[NotMapped]
public string KeySource
{
get
{
var finalKeyPath = KeySourcePath.EndsWith("\\") ? KeySourcePath : $"{KeySourcePath}\\";
finalKeyPath = Path.Combine(finalKeyPath, KeySourceFile);
return finalKeyPath;
}
}
}
}
@@ -0,0 +1,29 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Requests;
public class ExcelDataRequest
{
[Required(AllowEmptyStrings = false, ErrorMessage = "FileContent is required")]
public string FileContent { get; set; }
public List<SheetRequest> SheetRequests { get; set; } = null;
public bool SkipSheetForExtraction(string sheetName, out SheetRequest currentSheetRequest)
{
currentSheetRequest = SheetRequests is null || !SheetRequests.Any() ?
null :
SheetRequests.FirstOrDefault(sheetReq => sheetReq.SheetName == sheetName);
if (this is not null &&
SheetRequests is not null &&
SheetRequests.Any() &&
currentSheetRequest is null)
{
return true;
}
currentSheetRequest ??= new SheetRequest();
return false;
}
}
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Requests;
public class SheetRequest
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Sheet Name is required")]
public string SheetName { get; set; }
public List<string> Columns { get; set; } = null;
public List<int> Rows { get; set; } = null;
public bool SkipRowForExtraction(int rowIndex)
{
if (this is not null && Rows is not null && Rows.Any())
{
if (!Rows.Contains(rowIndex))
{
return true;
}
}
return false;
}
public bool SkipColumnForExtraction(string columnName)
{
if (this is not null && Columns is not null && Columns.Any())
{
if (!Columns.Contains(columnName, StringComparer.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
}
@@ -0,0 +1,9 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Responses;
public class CellResponse
{
public string ColumnName { get; set; }
public int Row { get; set; }
public string Value { get; set; }
public string Formula { get; set; }
}
@@ -0,0 +1,11 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Responses;
public class ExcelDataResponse
{
public ExcelDataResponse()
{
WorkBook = new WorkBook();
}
public WorkBook WorkBook { get; set; }
}
@@ -0,0 +1,14 @@
using System.Collections.Generic;
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Responses;
public class SheetResponse
{
public SheetResponse(string sheetName)
{
SheetName = sheetName;
CellResponses = new List<CellResponse>();
}
public string SheetName { get; set; }
public List<CellResponse> CellResponses { get; set; }
}
@@ -0,0 +1,12 @@
using System.Collections.Generic;
namespace LCU.Library.Internal.FileOperationsModels.Models.ExcelModels.Responses;
public class WorkBook
{
public WorkBook()
{
SheetResponses = new List<SheetResponse>();
}
public List<SheetResponse> SheetResponses { get; set; }
}
@@ -0,0 +1,57 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.IO;
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Enums;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using LCU.Library.Internal.LcuEvaluationModels.Entities;
namespace LCU.Library.Internal.FileOperationsModels.Models;
public class ExtractIndexFileDataRequest : ReturnResponse
{
public string IndexFilePath { get; set; }
public DynamicNameSetting IndexFilePathSetting { get; set; }
public string IndexFileName { get; set; }
public DynamicNameSetting IndexFileNameSetting { get; set; }
public Delimiters DelimiterType { get; set; }
public bool ExtractAllIndexes { get; set; }
public List<int> IndexesToExtract { get; set; }
public EvaluationDetail EvaluationRule { get; set; }
public string DestinationIndexFileName { get; set; }
public string DestinationFilePath { get; set; }
public DynamicNameSetting DestinationFilePathSetting { get; set; }
public bool AppendToDestinationIndexFile { get; set; }
public bool IndexHasHeaders { get; set; }
[NotMapped]
public string FinalIndexFileName => DynamicNameBuilder.BuildDynamicName(IndexFileName, IndexFileNameSetting);
[NotMapped]
public string FinalIndexFileDirectory
{
get
{
var indexFilePath = IndexFilePath.EndsWith("\\") ? IndexFilePath : $"{IndexFilePath}\\";
return DynamicNameBuilder.BuildDynamicName(indexFilePath, IndexFilePathSetting);
}
}
[NotMapped]
public string FinalIndexFilePath => Path.Combine(FinalIndexFileDirectory, FinalIndexFileName);
[NotMapped]
public string FinalDestinationPath
{
get
{
var destinationFilePath = DestinationFilePath.EndsWith("\\") ? DestinationFilePath : $"{DestinationFilePath}\\";
return DynamicNameBuilder.BuildDynamicName(destinationFilePath, DestinationFilePathSetting);
}
}
[NotMapped]
public string FinalDestinationIndexFilePath => Path.Combine(FinalDestinationPath, DestinationIndexFileName);
}
@@ -0,0 +1,25 @@
namespace LCU.Library.Internal.FileOperationsModels.Models;
public enum FileOperationType
{
Move = 0,
Copy = 1,
Delete = 2,
Rename = 3,
ZipDirectory = 4,
CreateDirectory = 5,
RenameDirectory = 6,
BulkMoveFile = 7,
UnzipFile = 8,
EncryptFileData = 9,
DecryptFileData = 10,
Modify = 11,
UnzipPasswordProtectedFile = 12,
BatchPdfParser = 13,
WriteFile = 14,
DeleteDirectory = 15,
Validate = 16,
AppendFile = 17,
ExtractIndexFileData = 18,
DeleteEmptyDirectory = 19,
ValidateFileSizeInRange = 20
}
@@ -0,0 +1,66 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public abstract class FileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; }
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
public string DestinationName { get; set; }
public bool Overwrite { get; set; }
public bool SucceedOnError { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
[NotMapped]
public string FinalSourceFile
{
get
{
return DynamicNameBuilder.BuildDynamicName(SourceFile, FileNameSetting);
}
}
[NotMapped]
public string FinalDestinationName
{
get
{
return string.IsNullOrWhiteSpace(DestinationName) ? FinalSourceFile : DestinationName;
}
}
[NotMapped]
public string Source
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + FinalSourceFile;
}
}
[NotMapped]
public string Destination
{
get
{
var finalDestinationPath = DestinationPath.EndsWith("\\") ? DestinationPath : $"{DestinationPath}\\";
return finalDestinationPath + FinalDestinationName;
}
}
}
}
@@ -0,0 +1,63 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models.HtmlToPdfModels;
public class HtmlToPdfRequest
{
[Required(AllowEmptyStrings = false)]
public string HtmlTemplateFilePath { get; set; }
[Required]
[RegularExpression(@"^[^\.]+$", ErrorMessage = "File extensions are not allowed.")]
public string PdfName { get; set; }
public bool KeepHtmlFile { get; set; } = false;
public bool KeepPdfFile { get; set; } = false;
[Required(AllowEmptyStrings = false)]
public string HtmlSaveFilePath { get; set; }
[Required(AllowEmptyStrings = false)]
public string PdfSaveFilePath { get; set; }
public List<TagValue> BodyTagValues { get; set; }
public List<ValueCollection> BodyValueCollections { get; set; }
[NotMapped]
public string FinalHtmlSaveFilePath
{
get
{
var finalHtmlSavePath = HtmlSaveFilePath.EndsWith("\\") ?
HtmlSaveFilePath :
$"{HtmlSaveFilePath}\\";
return finalHtmlSavePath;
}
}
[NotMapped]
public string FinalPdfSaveFilePath
{
get
{
var finalPdfSaveFilePath = PdfSaveFilePath.EndsWith("\\") ?
PdfSaveFilePath :
$"{PdfSaveFilePath}\\";
return finalPdfSaveFilePath;
}
}
[NotMapped]
public string FinalHtmlSaveFilePathWithFile
{
get
{
return $"{FinalHtmlSaveFilePath}{PdfName}.html";
}
}
[NotMapped]
public string FinalPdfSaveFilePathWithFile
{
get
{
return $"{FinalPdfSaveFilePath}{PdfName}.pdf";
}
}
}
@@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Models.HtmlToPdfModels;
public class TagValue
{
[Required(AllowEmptyStrings = false)]
public string Tag { get; set; }
[Required(AllowEmptyStrings = false)]
public string Value { get; set; }
}
@@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Models.HtmlToPdfModels;
public class ValueCollection
{
[Required(AllowEmptyStrings = false)]
public string CollectionTag { get; set; }
[Required(AllowEmptyStrings = false)]
public string CollectionHtmlTemplateFilePath { get; set; }
public List<ValueCollectionItem> ValueCollectionItems { get; set; }
}
@@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace LCU.Library.Internal.FileOperationsModels.Models.HtmlToPdfModels;
public class ValueCollectionItem
{
public List<TagValue> TagValues { get; set; }
public List<ValueCollection> ValueCollections { get; set; }
}
@@ -0,0 +1,78 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class ModifyFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; }
public string PrependText { get; set; }
public string SourceExtension { get; set; }
public string AppendText { get; set; }
public string NewExtension { get; set; }
public int MaxAmountOfFiles { get; set; } = 0;
public bool SucceedOnError { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
[NotMapped]
public string OriginalSource
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + OriginalSourceFile;
}
}
[NotMapped]
public string OriginalSourceFile
{
get
{
var fileName = DynamicNameBuilder.BuildDynamicName($"{SourceFile}.{SourceExtension}", FileNameSetting);
return fileName;
}
}
[NotMapped]
public string FinalSourceFile
{
get
{
var fileName = DynamicNameBuilder.BuildDynamicName(SourceFile, FileNameSetting);
var finalFileName = $"{PrependText}{fileName}{AppendText}.{FinalExtension}";
return finalFileName;
}
}
[NotMapped]
public string FinalSource
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + FinalSourceFile;
}
}
public static string GetNameWithoutExtension(string name, string extension)
{
var fileNameWithOutExtension = name.Replace("." + extension, string.Empty);
return fileNameWithOutExtension;
}
[NotMapped]
public string FinalExtension
{
get
{
if (string.IsNullOrWhiteSpace(NewExtension))
{
return SourceExtension;
}
return NewExtension;
}
}
}
}
@@ -0,0 +1,6 @@
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class MoveFileRequest : FileRequest
{
}
}
@@ -0,0 +1,8 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.NameSettings
{
public class DateFormatSetting
{
public string Tag { get; set; }
public string DateFormat { get; set; }
}
}
@@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace LCU.Library.Internal.FileOperationsModels.Models.NameSettings
{
public class DynamicNameSetting
{
public List<DateFormatSetting> DateFormatSettings { get; set; }
public List<RegexSetting> RegexSettings { get; set; }
public int DaysFromToday { get; set; }
}
}
@@ -0,0 +1,8 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.NameSettings
{
public class RegexSetting
{
public string Tag { get; set; }
public string Regex { get; set; }
}
}
@@ -0,0 +1,46 @@
using System.ComponentModel.DataAnnotations;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class ParsePdfRequest
{
private string rootPath;
private string parsedPdfname;
[Required(AllowEmptyStrings = false)]
public string RootPath
{
get
{
return rootPath;
}
set
{
rootPath = string.IsNullOrWhiteSpace(value) || value.EndsWith("\\") ? value : $"{value}\\";
}
}
[Required(AllowEmptyStrings = false)]
public string PdfName { get; set; }
[Required]
[Range(1, int.MaxValue, ErrorMessage = "PageStart must be larger then 0.")]
public int PageStart { get; set; }
[Required]
[Range(1, int.MaxValue, ErrorMessage = "PageStop must be larger then 0.")]
public int PageStop { get; set; }
public string ParsedPdfname
{
get
{
return parsedPdfname;
}
set
{
parsedPdfname = value.ToLower().EndsWith(".pdf") || string.IsNullOrWhiteSpace(value) ? value : $"{value}.pdf";
}
}
}
}
@@ -0,0 +1,11 @@
using System;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models;
public class QueueRequest
{
public ReturnResponse ReturnResponse { get; set; }
public FileOperationType FileOperationType { get; set; }
public string Request { get; set; }
public int? Attempts { get; set; }
public DateTime QueueTimeStamp { get; set; }
}
@@ -0,0 +1,62 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class RenameDirectoryRequest : ReturnResponse
{
[Required(ErrorMessage = "Source directory path is required.")]
public string SourceDirectoryPath { get; set; }
[Required(ErrorMessage = "Source directory name is required.")]
public string SourceDirectoryName { get; set; }
[Required(ErrorMessage = "Directory name is required.")]
public string NewDirectoryName { get; set; }
public DynamicNameSetting SourceDirectoryNameSetting { get; set; }
public DynamicNameSetting NewDirectoryNameSetting { get; set; }
[NotMapped]
public string FinalSourceDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(SourceDirectoryName, SourceDirectoryNameSetting);
}
}
[NotMapped]
public string FinalSourceDirectoryPath
{
get
{
var finalDestinationPath = SourceDirectoryPath.EndsWith("\\") ? SourceDirectoryPath : $"{SourceDirectoryPath}\\";
return $"{finalDestinationPath}{FinalSourceDirectoryName}";
}
}
[NotMapped]
public string FinalNewDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(NewDirectoryName, NewDirectoryNameSetting);
}
}
[NotMapped]
public string NewDirectoryDestination
{
get
{
var finalDestinationPath = SourceDirectoryPath.EndsWith("\\") ? SourceDirectoryPath : $"{SourceDirectoryPath}\\";
return $"{finalDestinationPath}{FinalNewDirectoryName}";
}
}
}
}
@@ -0,0 +1,62 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class RenameFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required.")]
public string SourcePath { get; set; }
[Required(ErrorMessage = "Source file is required.")]
public string SourceFile { get; set; }
[Required(ErrorMessage = "New file name is required.")]
public string NewFilename { get; set; }
public DynamicNameSetting SourceNameSetting { get; set; }
public DynamicNameSetting NewNameSetting { get; set; }
public bool SucceedOnError { get; set; }
[NotMapped]
public string FinalSourceFile
{
get
{
return DynamicNameBuilder.BuildDynamicName(SourceFile, SourceNameSetting);
}
}
[NotMapped]
public string Source
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + FinalSourceFile;
}
}
[NotMapped]
public string FinalNewFileName
{
get
{
return DynamicNameBuilder.BuildDynamicName(NewFilename, NewNameSetting);
}
}
[NotMapped]
public string NewFilenamePath
{
get
{
var finalSourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return finalSourcePath + FinalNewFileName;
}
}
}
}
@@ -0,0 +1,19 @@
using System.Collections.Generic;
using LCU.Library.Internal.ApiResponse.Models;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class RequestResponse
{
public RequestResponse()
{
MessageStack = new List<string>();
IsSuccessful = true;
ReturnResponse = null;
}
public List<string> MessageStack { get; set; }
public bool IsSuccessful { get; set; }
public ReturnResponse ReturnResponse { get; set; }
}
}
@@ -0,0 +1,29 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.IO;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public class FileDestinationRequest
{
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
public DynamicNameSetting DestinationPathSettings { get; set; }
public string DestinationName { get; set; } = string.Empty;
public bool Overwrite { get; set; }
[NotMapped]
public string FinalDestinationPath
{
get
{
var destinationPath = DestinationPath.EndsWith("\\") ? DestinationPath : $"{DestinationPath}\\";
return DynamicNameBuilder.BuildDynamicName(destinationPath, DestinationPathSettings);
}
}
[NotMapped]
public string Destination => Path.Combine(FinalDestinationPath, DestinationName);
}
@@ -0,0 +1,9 @@
using LCU.Library.Internal.FileOperationsModels.Enums;
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public class FileSizeRequest : IFileSourceRequest
{
public FileSourceRequest FileSourceRequest { get; set; } = new();
public FileSizeTypes FileSizeType { get; set; }
}
@@ -0,0 +1,35 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.IO;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public class FileSourceRequest
{
[Required(ErrorMessage = "Source path is required")]
public string SourcePath { get; set; } = string.Empty;
public DynamicNameSetting SourcePathSettings { get; set; } = new();
[Required(ErrorMessage = "Source file is required")]
public string SourceFile { get; set; } = string.Empty;
public DynamicNameSetting SourceFileSettings { get; set; } = new();
[NotMapped]
public string FinalSourceFile => DynamicNameBuilder.BuildDynamicName(SourceFile, SourceFileSettings);
[NotMapped]
public string FinalSourcePath
{
get
{
var sourcePath = SourcePath.EndsWith("\\") ? SourcePath : $"{SourcePath}\\";
return DynamicNameBuilder.BuildDynamicName(sourcePath, SourcePathSettings);
}
}
[NotMapped]
public string Source => Path.Combine(FinalSourcePath, FinalSourceFile);
}
@@ -0,0 +1,6 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public interface IFileDestinationRequest
{
public FileDestinationRequest FileDestinationRequest { get; set; }
}
@@ -0,0 +1,6 @@
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public interface IFileSourceRequest
{
public FileSourceRequest FileSourceRequest { get; set; }
}
@@ -0,0 +1,14 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Enums;
using System.ComponentModel;
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public class ValidateFileRequest : ReturnResponse, IFileSourceRequest
{
public FileSourceRequest FileSourceRequest { get; set; } = new();
[DefaultValue(false)]
public bool CheckFileCount { get; set; } = false;
public int FileCount { get; set; }
public OperatorTypes OperatorType { get; set; }
public bool FileDoesExist { get; set; }
}
@@ -0,0 +1,12 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Enums;
namespace LCU.Library.Internal.FileOperationsModels.Models.Requests;
public class ValidateFileSizeInRangeRequest : ReturnResponse, IFileSourceRequest
{
public FileSourceRequest FileSourceRequest { get; set; } = new();
public FileSizeTypes FileSizeType { get; set; }
public decimal StartFileSizeRange { get; set; }
public decimal EndFileSizeRange { get; set; }
}
@@ -0,0 +1,26 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Reflection;
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Enums;
namespace LCU.Library.Internal.FileOperationsModels.Models.Responses;
public class FileSizeResponse : ReturnResponse
{
public string FileName { get; set; } = string.Empty;
public decimal FileSize { get; set; }
public FileSizeTypes FileSizeType { get; set; }
[NotMapped]
public string FileSizeString
{
get
{
var fileSizeType = FileSizeType.GetType().GetMember(FileSizeType.ToString()).First().GetCustomAttribute<DisplayAttribute>()?.Name;
return $"{Math.Round(FileSize, 6):0.######} {fileSizeType}";
}
}
}
@@ -0,0 +1,96 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class UnzipFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourceDirectory { get; set; }
[Required(ErrorMessage = "Zip file name is required.")]
public string ZipFileName { get; set; }
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
public bool UseZipFileNameAsFinalDestination { get; set; }
public bool IgnoreFileNameSubFolderAsDestination { get; set; }
public int MaxFileDepth { get; set; } = 0;
public DynamicNameSetting FileNameSetting { get; set; }
public DynamicNameSetting SourceDirectorySetting { get; set; }
public DynamicNameSetting DestinationPathSetting { get; set; }
[NotMapped]
public string ZipFileNameWithDate
{
get
{
return DynamicNameBuilder.BuildDynamicName(ZipFileName, FileNameSetting);
}
}
[NotMapped]
public string FormattedSourceDirectoryPath
{
get
{
var sourceDirectoryWithDates = DynamicNameBuilder.BuildDynamicName(SourceDirectory, SourceDirectorySetting);
return sourceDirectoryWithDates.EndsWith("\\") ? sourceDirectoryWithDates : $"{sourceDirectoryWithDates}\\";
}
}
[NotMapped]
public string FinalZipFileName
{
get
{
return ZipFileNameWithDate.ToUpper().EndsWith(".ZIP") ? ZipFileNameWithDate : $"{ZipFileNameWithDate}.zip";
}
}
[NotMapped]
public string SourceFilePath
{
get
{
return FormattedSourceDirectoryPath + FinalZipFileName;
}
}
[NotMapped]
public string FormattedDestinationPath
{
get
{
var destinationPathDates = DynamicNameBuilder.BuildDynamicName(DestinationPath, DestinationPathSetting);
return destinationPathDates.EndsWith("\\") ? destinationPathDates : $"{destinationPathDates}\\";
}
}
[NotMapped]
public string ZipFileNameWithoutZip
{
get
{
return FinalZipFileName.ToUpper().EndsWith(".ZIP") ?
FinalZipFileName.ToUpper().Replace(".ZIP", "") :
FinalZipFileName;
}
}
[NotMapped]
public string DestinationPathZipFileNameWithoutZip
{
get
{
return $"{FormattedDestinationPath}{ZipFileNameWithoutZip}\\";
}
}
}
}
@@ -0,0 +1,76 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class UnzipPasswordProtectedFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourceDirectory { get; set; }
[Required(ErrorMessage = "Password protected zip file name is required")]
public string PasswordProtectedZipFileName { get; set; }
[Required(ErrorMessage = "Password is required")]
public string Password { get; set; }
[Required(ErrorMessage = "Destination path is required")]
public string DestinationPath { get; set; }
public bool UseZipFileNameAsFinalDestination { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
public DynamicNameSetting SourceDirectorySetting { get; set; }
public DynamicNameSetting DestinationPathSetting { get; set; }
[NotMapped]
public string PasswordProtectedZipFileNameWithDate
{
get
{
return DynamicNameBuilder.BuildDynamicName(PasswordProtectedZipFileName, FileNameSetting);
}
}
[NotMapped]
public string FormattedSourceDirectoryPath
{
get
{
var sourceDirectoryWithDates = DynamicNameBuilder.BuildDynamicName(SourceDirectory, SourceDirectorySetting);
return sourceDirectoryWithDates.EndsWith("\\") ? sourceDirectoryWithDates : $"{sourceDirectoryWithDates}\\";
}
}
[NotMapped]
public string FinalPasswordProtectedZipFileName
{
get
{
return PasswordProtectedZipFileNameWithDate.ToUpper().EndsWith(".ZIP") ? PasswordProtectedZipFileNameWithDate : $"{PasswordProtectedZipFileNameWithDate}.zip";
}
}
[NotMapped]
public string SourceFilePath
{
get
{
return FormattedSourceDirectoryPath + FinalPasswordProtectedZipFileName;
}
}
[NotMapped]
public string FormattedDestinationPath
{
get
{
var destinationPath = DynamicNameBuilder.BuildDynamicName(DestinationPath, DestinationPathSetting);
return destinationPath.EndsWith("\\") ? destinationPath : $"{destinationPath}\\"; ;
}
}
}
}
@@ -0,0 +1,38 @@
using LCU.Library.Internal.ApiResponse.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class WriteFileRequest : ReturnResponse
{
[Required(ErrorMessage = "Destination path is required.")]
public string DestinationPath { get; set; }
[Required(ErrorMessage = "FileName is required.")]
public string FileName { get; set; }
[Required(ErrorMessage = "Extension is required.")]
public string Extension { get; set; }
[Required(ErrorMessage = "FileData is required.")]
public string FileData { get; set; }
public bool Overwrite { get; set; } = false;
[NotMapped]
public string FullFilePath
{
get
{
return DestinationPath.EndsWith("\\") ? $"{DestinationPath}{FileNameWithExtension}" : $"{DestinationPath}\\{FileNameWithExtension}";
}
}
[NotMapped]
public string FileNameWithExtension
{
get
{
return Extension.StartsWith(".") ? $"{FileName}{Extension}" : $"{FileName}.{Extension}";
}
}
}
}
@@ -0,0 +1,53 @@
using LCU.Library.Internal.ApiResponse.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using LCU.Library.Internal.FileOperationsModels.Shared;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace LCU.Library.Internal.FileOperationsModels.Models
{
public class ZipDirectoryRequest : ReturnResponse
{
[Required(ErrorMessage = "Source path is required")]
public string SourceDirectory { get; set; }
public string DirectoryName { get; set; }
[Required(ErrorMessage = "Zip path is required.")]
public string ZipPath { get; set; }
public string ZipFileName { get; set; }
public DynamicNameSetting FileNameSetting { get; set; }
[NotMapped]
public string DynamicDirectoryName
{
get
{
return DynamicNameBuilder.BuildDynamicName(DirectoryName, FileNameSetting);
}
}
[NotMapped]
public string FormattedSourceDirectory
{
get
{
return SourceDirectory.EndsWith("\\") ? SourceDirectory : $"{SourceDirectory}\\";
}
}
[NotMapped]
public string ZipDestination
{
get
{
var finalDestinationPath = ZipPath.EndsWith("\\") ? ZipPath : $"{ZipPath}\\";
var finalZipName = !string.IsNullOrWhiteSpace(ZipFileName) ? ZipFileName : DirectoryName;
finalZipName = finalZipName.ToUpper().EndsWith(".ZIP") ? finalZipName : $"{finalZipName}.zip";
return finalDestinationPath + finalZipName;
}
}
}
}
@@ -0,0 +1,18 @@
using Newtonsoft.Json;
namespace LCU.Library.Internal.FileOperationsModels.Shared
{
public static class Clone
{
public static T DeepClone<T>(this T source)
{
if (ReferenceEquals(source, null))
{
return default;
}
var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source), deserializeSettings);
}
}
}
@@ -0,0 +1,130 @@
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using System;
using System.Collections.Generic;
using LCU.Library.Internal.FileOperationsModels.Models.Requests;
namespace LCU.Library.Internal.FileOperationsModels.Shared
{
public static class DynamicNameBuilder
{
public static List<TRequest> BuildListOfRequest<TRequest>(TRequest originalRequest) where TRequest : FileRequest
{
var nameList = RegexNameHandler.BuildFileList(originalRequest.SourcePath,
originalRequest.FinalSourceFile,
originalRequest.FileNameSetting);
var requests = new List<TRequest>();
foreach (var name in nameList)
{
var newRequest = originalRequest.DeepClone();
newRequest.SourceFile = name;
requests.Add(newRequest);
}
return requests;
}
public static List<TRequest> BuildListOfRequests<TRequest>(TRequest originalRequest) where TRequest : IFileSourceRequest
{
var nameList = RegexNameHandler.BuildFileList(originalRequest.FileSourceRequest.FinalSourcePath,
originalRequest.FileSourceRequest.FinalSourceFile,
originalRequest.FileSourceRequest.SourceFileSettings);
var requests = new List<TRequest>();
foreach (var name in nameList)
{
var newRequest = originalRequest.DeepClone();
newRequest.FileSourceRequest.SourceFile = name;
requests.Add(newRequest);
}
return requests;
}
public static List<ModifyFileRequest> BuildListOfRequest(ModifyFileRequest originalRequest)
{
var nameList = RegexNameHandler.BuildFileList(originalRequest.SourcePath,
originalRequest.OriginalSourceFile,
originalRequest.FileNameSetting);
var requests = new List<ModifyFileRequest>();
foreach (var name in nameList)
{
var newRequest = originalRequest.DeepClone();
newRequest.SourceFile = ModifyFileRequest.GetNameWithoutExtension(name, newRequest.SourceExtension);
requests.Add(newRequest);
}
return requests;
}
[Obsolete ("As of 7/7/2025, this method is obsolete. Use BuildListOfRequests instead.")]
public static List<ExtractIndexFileDataRequest> BuildListOfRequest(ExtractIndexFileDataRequest originalRequest)
{
var nameList = RegexNameHandler.BuildFileList(originalRequest.FinalIndexFileDirectory,
originalRequest.FinalIndexFileName,
originalRequest.IndexFileNameSetting);
var requests = new List<ExtractIndexFileDataRequest>();
foreach (var name in nameList)
{
var newRequest = originalRequest.DeepClone();
newRequest.IndexFileName = name;
requests.Add(newRequest);
}
return requests;
}
public static string BuildDynamicName(string name, DynamicNameSetting nameSetting)
{
if (nameSetting == null ||
nameSetting.DateFormatSettings == null)
{
return name;
}
name = AddFormattedDateSettings(name, nameSetting);
return name;
}
public static string AddFormattedDateSettings(string name, DynamicNameSetting nameSettings)
{
foreach (var formatSetting in nameSettings.DateFormatSettings)
{
var convertedFormat = DateTimeStringBuilder(formatSetting.DateFormat, nameSettings.DaysFromToday);
name = ReplaceTagWithFormattedSTring(name, formatSetting.Tag, convertedFormat);
}
return name;
}
public static string DateTimeStringBuilder(string format, int daysFromToday)
{
if (string.IsNullOrWhiteSpace(format))
{
return "";
}
return DateTime.Now.AddDays(daysFromToday).ToString(format);
}
public static string ReplaceTagWithFormattedSTring(string name, string tag, string convertedFormat)
{
if (string.IsNullOrEmpty(tag) || string.IsNullOrWhiteSpace(convertedFormat))
{
return name.Trim();
}
return name.Replace(tag, convertedFormat);
}
}
}
@@ -0,0 +1,69 @@
using LCU.Library.Internal.FileOperationsModels.Models.NameSettings;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace LCU.Library.Internal.FileOperationsModels.Shared
{
public static class RegexNameHandler
{
public static ICollection<string> BuildFileList(string path, string name, DynamicNameSetting nameSetting)
{
var fileList = new List<string>();
if (nameSetting == null ||
nameSetting.RegexSettings == null ||
!nameSetting.RegexSettings.Any())
{
fileList.Add(name);
return fileList;
}
DirectoryInfo localDirectory = new DirectoryInfo(path);
var regexName = BuildRegexName(name, nameSetting);
fileList = localDirectory.GetFiles().Where(file => regexName.IsMatch(file.Name)).Select(file => file.Name).ToList();
return fileList;
}
public static ICollection<string> BuildDirectoryList(string path, string name, DynamicNameSetting nameSetting)
{
var directoriesList = new List<string>();
if (nameSetting == null ||
nameSetting.RegexSettings == null ||
string.IsNullOrWhiteSpace(name))
{
directoriesList.Add(name);
return directoriesList;
}
DirectoryInfo localDirectory = new DirectoryInfo(path);
var regexName = BuildRegexName(name, nameSetting);
directoriesList = localDirectory.GetDirectories().Where(directory => regexName.IsMatch(directory.Name)).Select(directory => directory.Name).ToList();
return directoriesList;
}
public static Regex BuildRegexName(string name, DynamicNameSetting nameSettings)
{
foreach (var formatSetting in nameSettings.RegexSettings)
{
name = ReplaceTagWithRegex(name, formatSetting.Tag, formatSetting.Regex);
}
return new Regex(name);
}
public static string ReplaceTagWithRegex(string name, string tag, string regex)
{
if (string.IsNullOrEmpty(tag) || string.IsNullOrWhiteSpace(regex))
{
return name.Trim();
}
return name.Replace(tag, regex);
}
}
}