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

105 lines
4.1 KiB
C#

using System;
using System.IO;
using Newtonsoft.Json;
using LCU.Library.Internal.FileOperationsModels.Models;
using LCU.Library.Internal.FileOperationsModels.Shared;
using LCU.Library.Internal.LCUServiceFactory.Configurations;
using LCU.Api.Internal.FileOperations.Validations;
namespace LCU.Api.Internal.FileOperations.Services.FileActionServices;
public class MoveFileService : FileActionService, IFileActionService, IActionService<MoveFileRequest>
{
public MoveFileService(ServicesFactoryConfiguration servicesFactoryConfiguration)
: base(servicesFactoryConfiguration)
{
}
public RequestResponse ExecuteAction(QueueRequest queueRequest)
{
var requestResponse = new RequestResponse();
try
{
var fileRequest = JsonConvert.DeserializeObject<MoveFileRequest>(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(MoveFileRequest request)
{
return OperationService.PerformOperation(request, IsRequestValid, MoveFile);
}
private void MoveFile(MoveFileRequest request)
{
try
{
File.Move(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(MoveFileRequest 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(MoveFileRequest 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;
}
}