From f2a09ea10ea1456c9401879b3a415bbd00875839 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Wed, 7 May 2025 01:57:22 +0200 Subject: [PATCH] Refactor DocumentCreateCommand and enhance validation Updated the `DocumentCreateCommand` record to include a nullable `DataAsBase64` property for better encapsulation. Enhanced the `EnvelopeReceiverController` with logic to validate document data, ensuring that either `DataAsBase64` or `DataAsByte` is provided, but not both. Introduced a new static method `IsBase64String` to validate base64 string format. --- .../Create/CreateEnvelopeReceiverDtos.cs | 11 +++-- .../Controllers/EnvelopeReceiverController.cs | 41 ++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs index b1b8908a..54de38a9 100644 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/Create/CreateEnvelopeReceiverDtos.cs @@ -39,8 +39,11 @@ public record ReceiverGetOrCreateCommand([Required] IEnumerable Signa /// /// Die Dokumentdaten im Byte-Array-Format. Wird verwendet, wenn das Dokument als Roh-Binärdaten bereitgestellt wird. /// -/// -/// Die Dokumentdaten im Base64-String-Format. Wird verwendet, wenn das Dokument als Base64-codierter String bereitgestellt wird. -/// -public record DocumentCreateCommand(byte[]? DataAsByte = null, string? DataAsBase64 = null); +public record DocumentCreateCommand(byte[]? DataAsByte = null) +{ + /// + /// Die Dokumentdaten im Base64-String-Format. Wird verwendet, wenn das Dokument als Base64-codierter String bereitgestellt wird. + /// + public string? DataAsBase64 { get; set; } +}; #endregion \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs index 9ac91445..2c021dcb 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs @@ -37,6 +37,8 @@ public class EnvelopeReceiverController : ControllerBase private readonly IEnvelopeReceiverExecutor _erExecutor; + private readonly IDocumentExecutor _documentExecutor; + /// /// Konstruktor für den EnvelopeReceiverController. /// @@ -46,7 +48,7 @@ public class EnvelopeReceiverController : ControllerBase /// /// /// - public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor) + public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor, IDocumentExecutor documentExecutor) { _logger = logger; _erService = envelopeReceiverService; @@ -54,6 +56,7 @@ public class EnvelopeReceiverController : ControllerBase _mapper = mapper; _envelopeExecutor = envelopeExecutor; _erExecutor = erExecutor; + _documentExecutor = documentExecutor; } /// @@ -211,6 +214,20 @@ public class EnvelopeReceiverController : ControllerBase #endregion #region Add document + if(request.Document.DataAsBase64 is null) + if (request.Document.DataAsByte is null) + return BadRequest("No document data is found"); + else + request.Document.DataAsBase64 = Convert.ToBase64String(request.Document.DataAsByte); + else if (request.Document.DataAsByte is not null) + return BadRequest("Document data cannot be assigned as both byte data and base64 string."); + else if (!IsBase64String(request.Document.DataAsBase64)) + return BadRequest("Document data is not a base64 string"); + + var document = await _documentExecutor.CreateDocumentAsync(request.Document.DataAsBase64, envelope.Uuid, cancel); + + if(document is null) + return StatusCode(StatusCodes.Status500InternalServerError, "Document creation is failed."); #endregion @@ -222,4 +239,26 @@ public class EnvelopeReceiverController : ControllerBase return StatusCode(StatusCodes.Status500InternalServerError); } } + + /// + /// + /// + /// + /// + public static bool IsBase64String(string input) + { + if (string.IsNullOrWhiteSpace(input)) + return false; + + try + { + Convert.FromBase64String(input); + return true; + } + catch (FormatException) + { + return false; + } + } + } \ No newline at end of file