104 lines
4.0 KiB
C#
104 lines
4.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using Newtonsoft.Json;
|
|
using LCU.Library.Internal.FileOperationsModels.Shared;
|
|
using LCU.Library.Internal.FileOperationsModels.Models;
|
|
using LCU.Library.Internal.LCUServiceFactory.Configurations;
|
|
using LCU.Api.Internal.FileOperations.Validations;
|
|
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
|
|
|
|
public class CopyFileService : FileActionService, IFileActionService, IActionService<CopyFileRequest>
|
|
{
|
|
public CopyFileService(ServicesFactoryConfiguration servicesFactoryConfiguration)
|
|
: base(servicesFactoryConfiguration)
|
|
{
|
|
}
|
|
|
|
public RequestResponse ExecuteAction(QueueRequest queueRequest)
|
|
{
|
|
var requestResponse = new RequestResponse();
|
|
try
|
|
{
|
|
var fileRequest = JsonConvert.DeserializeObject<CopyFileRequest>(queueRequest.Request);
|
|
var requests = DynamicNameBuilder.BuildListOfRequest(fileRequest);
|
|
requestResponse = FileValidation.ValidateIfAnyRequest(requests, fileRequest.Source, fileRequest.SucceedOnError, requestResponse);
|
|
|
|
foreach (var request in requests)
|
|
{
|
|
var temporaryRequestResponse = PerformRequest(request);
|
|
if (!temporaryRequestResponse.IsSuccessful)
|
|
{
|
|
requestResponse.IsSuccessful = fileRequest.SucceedOnError;
|
|
if (fileRequest.SucceedOnError)
|
|
{
|
|
requestResponse.MessageStack.Add("Succeed On Error is set.");
|
|
}
|
|
|
|
requestResponse.MessageStack.AddRange(temporaryRequestResponse.MessageStack);
|
|
}
|
|
}
|
|
|
|
requestResponse.ReturnResponse = fileRequest;
|
|
return requestResponse;
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
return RequestResponseHelper.ExceptionUpdateRequestResponse(requestResponse,
|
|
queueRequest.FileOperationType,
|
|
exception.Message);
|
|
}
|
|
}
|
|
|
|
public RequestResponse PerformRequest(CopyFileRequest request)
|
|
{
|
|
return OperationService.PerformOperation(request, IsRequestValid, CopyFile);
|
|
}
|
|
|
|
private void CopyFile(CopyFileRequest request)
|
|
{
|
|
try
|
|
{
|
|
File.Copy(request.Source, request.Destination, request.Overwrite);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw new Exception($"Exception thrown while trying to ExecuteRequestAction. " +
|
|
$"Request: {JsonConvert.SerializeObject(request)}" +
|
|
$"ExceptionMessage: {exception.Message}");
|
|
}
|
|
}
|
|
|
|
public RequestResponse PreQueueValidation(CopyFileRequest originalRequest)
|
|
{
|
|
var requestResponse = new RequestResponse();
|
|
var requestList = DynamicNameBuilder.BuildListOfRequest(originalRequest);
|
|
requestResponse = FileValidation.ValidateIfAnyRequest(requestList, originalRequest.SourcePath, originalRequest.SucceedOnError, requestResponse);
|
|
foreach (var request in requestList)
|
|
{
|
|
requestResponse = IsRequestValid(request, requestResponse);
|
|
}
|
|
|
|
return requestResponse;
|
|
}
|
|
|
|
|
|
public RequestResponse IsRequestValid(CopyFileRequest fileRequest, RequestResponse requestResponse)
|
|
{
|
|
if (fileRequest.SucceedOnError)
|
|
{
|
|
return requestResponse;
|
|
}
|
|
requestResponse = FileValidation.ValidateSourceNotEmpty(fileRequest.Source, requestResponse);
|
|
requestResponse = FileValidation.ValidateFileExists(fileRequest.Source, requestResponse);
|
|
|
|
requestResponse = FileValidation.ValidateDestinationNotEmpty(fileRequest.Destination, requestResponse);
|
|
requestResponse = FileValidation.ValidateDirectoryExists(fileRequest.DestinationPath, requestResponse);
|
|
|
|
if (!fileRequest.Overwrite)
|
|
{
|
|
requestResponse = FileValidation.ValidateFileNotExists(fileRequest.Destination, requestResponse);
|
|
}
|
|
|
|
return requestResponse;
|
|
}
|
|
} |