This commit is contained in:
Zeeshaun
2026-04-28 15:21:46 +00:00
parent 43961b78aa
commit 4a540b30bb
8 changed files with 82 additions and 7 deletions
@@ -63,6 +63,15 @@ public class DirectFileOperationsController : ControllerBase
return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileService); return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileService);
} }
[HttpPost("WriteBinaryFile")]
[ProducesResponseType(200)]
[ProducesResponseType(typeof(ReturnResponse), 400)]
[ProducesResponseType(500)]
public async Task<IActionResult> WriteBinaryFile([FromBody] WriteFileRequest request)
{
return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileService);
}
[HttpPost("CreateDirectory")] [HttpPost("CreateDirectory")]
[ProducesResponseType(200)] [ProducesResponseType(200)]
[ProducesResponseType(typeof(ReturnResponse), 400)] [ProducesResponseType(typeof(ReturnResponse), 400)]
@@ -143,4 +152,4 @@ public class DirectFileOperationsController : ControllerBase
return StatusCode(StatusCodes.Status500InternalServerError); return StatusCode(StatusCodes.Status500InternalServerError);
} }
} }
} }
@@ -243,6 +243,16 @@ public class FileOperationsController : ControllerBase
return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileDataService); return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileDataService);
} }
// POST api/WriteBinaryFileData
[HttpPost("WriteBinaryFileData")]
[ProducesResponseType(201)]
[ProducesResponseType(typeof(List<string>), 400)]
[ProducesResponseType(500)]
public async Task<IActionResult> WriteBinaryFileData([FromBody] WriteFileRequest request)
{
return await HandleRequestResponse(request, FileOperationType.WriteFile, _writeFileDataService);
}
[HttpPost("DeleteDirectory")] [HttpPost("DeleteDirectory")]
[ProducesResponseType(201)] [ProducesResponseType(201)]
[ProducesResponseType(typeof(List<string>), 400)] [ProducesResponseType(typeof(List<string>), 400)]
@@ -289,4 +299,4 @@ public class FileOperationsController : ControllerBase
return StatusCode(StatusCodes.Status500InternalServerError); return StatusCode(StatusCodes.Status500InternalServerError);
} }
} }
} }
@@ -224,4 +224,4 @@ void AddMassTransitServices(ref IServiceCollection services,
}); });
}); });
services.AddMassTransitHostedService(); services.AddMassTransitHostedService();
} }
@@ -44,6 +44,13 @@ namespace LCU.Api.Internal.FileOperations.Services.FileActionServices
{ {
try 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); File.WriteAllText(request.FullFilePath, request.FileData);
} }
catch (Exception exception) catch (Exception exception)
@@ -119,4 +119,4 @@
"ReceiveEndpointType": "exchange", "ReceiveEndpointType": "exchange",
"PrefetchLimit": 1 "PrefetchLimit": 1
} }
} }
@@ -46,6 +46,34 @@ public class DirectFileOperationsControllerTest
_mockAppendFileService.Object); _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<string>(), IsSuccessful = true };
_mockWriteFileService.Setup(service => service.PreQueueValidation(It.IsAny<WriteFileRequest>())).Returns(validRequestResponse);
_mockDirectFileOperationsService.Setup(service =>
service.HandleDirectFileOperationsRequest(It.IsAny<WriteFileRequest>(), 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<WriteFileRequest>()), Times.Once);
_mockDirectFileOperationsService.Verify(service =>
service.HandleDirectFileOperationsRequest(It.IsAny<WriteFileRequest>(), FileOperationType.WriteFile), Times.Once);
}
[Fact] [Fact]
public async Task MoveFilePost_OK() public async Task MoveFilePost_OK()
{ {
@@ -240,4 +268,4 @@ public class DirectFileOperationsControllerTest
_mockDirectFileOperationsService.Verify(service => _mockDirectFileOperationsService.Verify(service =>
service.HandleDirectFileOperationsRequest(It.IsAny<AppendFileRequest>(), FileOperationType.AppendFile), Times.Once); service.HandleDirectFileOperationsRequest(It.IsAny<AppendFileRequest>(), FileOperationType.AppendFile), Times.Once);
} }
} }
@@ -75,6 +75,27 @@ public class FileOperationsControllerTest
_mockDirectFileService.Object); _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<string>(), IsSuccessful = true };
_mockWriteFileDataService.Setup(service => service.PreQueueValidation(It.IsAny<WriteFileRequest>())).Returns(validRequestResponse);
var result = await _controller.WriteBinaryFileData(request);
var okResult = result as OkResult;
Assert.NotNull(okResult);
Assert.Equal(200, okResult.StatusCode);
}
[Fact] [Fact]
public void GetFile_OK() public void GetFile_OK()
{ {
@@ -299,4 +320,4 @@ public class FileOperationsControllerTest
Assert.NotNull(okResult); Assert.NotNull(okResult);
Assert.Equal(200, okResult.StatusCode); Assert.Equal(200, okResult.StatusCode);
} }
} }
@@ -22,4 +22,4 @@ public enum FileOperationType
ExtractIndexFileData = 18, ExtractIndexFileData = 18,
DeleteEmptyDirectory = 19, DeleteEmptyDirectory = 19,
ValidateFileSizeInRange = 20 ValidateFileSizeInRange = 20
} }