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 { public MoveFileService(ServicesFactoryConfiguration servicesFactoryConfiguration) : base(servicesFactoryConfiguration) { } public RequestResponse ExecuteAction(QueueRequest queueRequest) { var requestResponse = new RequestResponse(); try { var fileRequest = JsonConvert.DeserializeObject(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; } }