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.
This commit is contained in:
Developer 02 2025-05-07 01:57:22 +02:00
parent cc86e5fadd
commit f2a09ea10e
2 changed files with 47 additions and 5 deletions

View File

@ -39,8 +39,11 @@ public record ReceiverGetOrCreateCommand([Required] IEnumerable<Signature> Signa
/// <param name="DataAsByte">
/// Die Dokumentdaten im Byte-Array-Format. Wird verwendet, wenn das Dokument als Roh-Binärdaten bereitgestellt wird.
/// </param>
/// <param name="DataAsBase64">
public record DocumentCreateCommand(byte[]? DataAsByte = null)
{
/// <summary>
/// Die Dokumentdaten im Base64-String-Format. Wird verwendet, wenn das Dokument als Base64-codierter String bereitgestellt wird.
/// </param>
public record DocumentCreateCommand(byte[]? DataAsByte = null, string? DataAsBase64 = null);
/// </summary>
public string? DataAsBase64 { get; set; }
};
#endregion

View File

@ -37,6 +37,8 @@ public class EnvelopeReceiverController : ControllerBase
private readonly IEnvelopeReceiverExecutor _erExecutor;
private readonly IDocumentExecutor _documentExecutor;
/// <summary>
/// Konstruktor für den EnvelopeReceiverController.
/// </summary>
@ -46,7 +48,7 @@ public class EnvelopeReceiverController : ControllerBase
/// <param name="mapper"></param>
/// <param name="envelopeExecutor"></param>
/// <param name="erExecutor"></param>
public EnvelopeReceiverController(ILogger<EnvelopeReceiverController> logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator, IMapper mapper, IEnvelopeExecutor envelopeExecutor, IEnvelopeReceiverExecutor erExecutor)
public EnvelopeReceiverController(ILogger<EnvelopeReceiverController> 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;
}
/// <summary>
@ -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);
}
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static bool IsBase64String(string input)
{
if (string.IsNullOrWhiteSpace(input))
return false;
try
{
Convert.FromBase64String(input);
return true;
}
catch (FormatException)
{
return false;
}
}
}