From 4a540b30bb2027aed4f47ab7f866e21b1dd8d021 Mon Sep 17 00:00:00 2001 From: Zeeshaun Date: Tue, 28 Apr 2026 15:21:46 +0000 Subject: [PATCH] Updating --- .../DirectFileOperationsController.cs | 11 ++++++- .../Controllers/FileOperationsController.cs | 12 +++++++- .../Program.cs | 2 +- .../FileActionServices/WriteFileService.cs | 7 +++++ .../appsettings.json | 2 +- .../DirectFileOperationsControllerTest.cs | 30 ++++++++++++++++++- .../FileOperationsControllerTest.cs | 23 +++++++++++++- .../Models/FileOperationType.cs | 2 +- 8 files changed, 82 insertions(+), 7 deletions(-) diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/DirectFileOperationsController.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/DirectFileOperationsController.cs index e56580f..2150640 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/DirectFileOperationsController.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/DirectFileOperationsController.cs @@ -63,6 +63,15 @@ public class DirectFileOperationsController : ControllerBase return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileService); } + [HttpPost("WriteBinaryFile")] + [ProducesResponseType(200)] + [ProducesResponseType(typeof(ReturnResponse), 400)] + [ProducesResponseType(500)] + public async Task WriteBinaryFile([FromBody] WriteFileRequest request) + { + return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileService); + } + [HttpPost("CreateDirectory")] [ProducesResponseType(200)] [ProducesResponseType(typeof(ReturnResponse), 400)] @@ -143,4 +152,4 @@ public class DirectFileOperationsController : ControllerBase return StatusCode(StatusCodes.Status500InternalServerError); } } -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/FileOperationsController.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/FileOperationsController.cs index 22fc300..b861ff4 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/FileOperationsController.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Controllers/FileOperationsController.cs @@ -243,6 +243,16 @@ public class FileOperationsController : ControllerBase return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileDataService); } + // POST api/WriteBinaryFileData + [HttpPost("WriteBinaryFileData")] + [ProducesResponseType(201)] + [ProducesResponseType(typeof(List), 400)] + [ProducesResponseType(500)] + public async Task WriteBinaryFileData([FromBody] WriteFileRequest request) + { + return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileDataService); + } + [HttpPost("DeleteDirectory")] [ProducesResponseType(201)] [ProducesResponseType(typeof(List), 400)] @@ -289,4 +299,4 @@ public class FileOperationsController : ControllerBase return StatusCode(StatusCodes.Status500InternalServerError); } } -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Program.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Program.cs index a6c351a..d71bf9f 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Program.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Program.cs @@ -224,4 +224,4 @@ void AddMassTransitServices(ref IServiceCollection services, }); }); services.AddMassTransitHostedService(); -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Services/FileActionServices/WriteFileService.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Services/FileActionServices/WriteFileService.cs index 449f65d..7643fe8 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Services/FileActionServices/WriteFileService.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/Services/FileActionServices/WriteFileService.cs @@ -44,6 +44,13 @@ namespace LCU.Api.Internal.FileOperations.Services.FileActionServices { try { + if (string.Equals(request.Extension?.TrimStart('.'), "wav", StringComparison.OrdinalIgnoreCase)) + { + var fileBytes = Convert.FromBase64String(request.FileData); + File.WriteAllBytes(request.FullFilePath, fileBytes); + return; + } + File.WriteAllText(request.FullFilePath, request.FileData); } catch (Exception exception) diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/appsettings.json b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/appsettings.json index bbb57be..4034c9a 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/appsettings.json +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperations/appsettings.json @@ -119,4 +119,4 @@ "ReceiveEndpointType": "exchange", "PrefetchLimit": 1 } -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/DirectFileOperationsControllerTest.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/DirectFileOperationsControllerTest.cs index 373d23b..3018be6 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/DirectFileOperationsControllerTest.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/DirectFileOperationsControllerTest.cs @@ -46,6 +46,34 @@ public class DirectFileOperationsControllerTest _mockAppendFileService.Object); } + [Fact] + public async Task WriteBinaryFilePost_Ok() + { + var request = new WriteFileRequest + { + FileData = Convert.ToBase64String(new byte[] { 0x52, 0x49, 0x46, 0x46 }), + DestinationPath = "SomePath", + Extension = ".wav", + FileName = "FileName" + }; + + var validRequestResponse = new RequestResponse() { MessageStack = new List(), IsSuccessful = true }; + _mockWriteFileService.Setup(service => service.PreQueueValidation(It.IsAny())).Returns(validRequestResponse); + _mockDirectFileOperationsService.Setup(service => + service.HandleDirectFileOperationsRequest(It.IsAny(), FileOperationType.WriteFile)) + .ReturnsAsync(validRequestResponse) + .Verifiable(); + + var result = await _controller.WriteBinaryFile(request); + var okResult = result as OkObjectResult; + + Assert.NotNull(okResult); + Assert.Equal(200, okResult.StatusCode); + _mockWriteFileService.Verify(service => service.PreQueueValidation(It.IsAny()), Times.Once); + _mockDirectFileOperationsService.Verify(service => + service.HandleDirectFileOperationsRequest(It.IsAny(), FileOperationType.WriteFile), Times.Once); + } + [Fact] public async Task MoveFilePost_OK() { @@ -240,4 +268,4 @@ public class DirectFileOperationsControllerTest _mockDirectFileOperationsService.Verify(service => service.HandleDirectFileOperationsRequest(It.IsAny(), FileOperationType.AppendFile), Times.Once); } -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/FileOperationsControllerTest.cs b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/FileOperationsControllerTest.cs index 0b838e8..6f19b1d 100644 --- a/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/FileOperationsControllerTest.cs +++ b/LCU.API.Internal.FileOperations/LCU.Api.Internal.FileOperationsTests/Controllers/FileOperationsControllerTest.cs @@ -75,6 +75,27 @@ public class FileOperationsControllerTest _mockDirectFileService.Object); } + [Fact] + public async Task WriteBinaryFileDataPost_OK() + { + var request = new WriteFileRequest + { + FileData = Convert.ToBase64String(new byte[] { 0x52, 0x49, 0x46, 0x46 }), + DestinationPath = "SomePath", + Extension = ".wav", + FileName = "FileName" + }; + + var validRequestResponse = new RequestResponse() { MessageStack = new List(), IsSuccessful = true }; + _mockWriteFileDataService.Setup(service => service.PreQueueValidation(It.IsAny())).Returns(validRequestResponse); + + var result = await _controller.WriteBinaryFileData(request); + var okResult = result as OkResult; + + Assert.NotNull(okResult); + Assert.Equal(200, okResult.StatusCode); + } + [Fact] public void GetFile_OK() { @@ -299,4 +320,4 @@ public class FileOperationsControllerTest Assert.NotNull(okResult); Assert.Equal(200, okResult.StatusCode); } -} \ No newline at end of file +} diff --git a/LCU.API.Internal.FileOperations/LCU.Library.Internal.FileOperationsModels/Models/FileOperationType.cs b/LCU.API.Internal.FileOperations/LCU.Library.Internal.FileOperationsModels/Models/FileOperationType.cs index 7a4e8c2..5aed5d8 100644 --- a/LCU.API.Internal.FileOperations/LCU.Library.Internal.FileOperationsModels/Models/FileOperationType.cs +++ b/LCU.API.Internal.FileOperations/LCU.Library.Internal.FileOperationsModels/Models/FileOperationType.cs @@ -22,4 +22,4 @@ public enum FileOperationType ExtractIndexFileData = 18, DeleteEmptyDirectory = 19, ValidateFileSizeInRange = 20 -} \ No newline at end of file +}