Introduced DTOs for request and response to handle Swiss QR Code extraction from PDF documents. Implemented `ExtractSwissQrCodeHandler` to process the extraction using `ISwissQrCodeProcessor`. Added validation for the query with `ExtractSwissQrCodeValidator`. Developed unit tests to ensure correct behavior for successful and failure scenarios.
34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using DocumentOperator.Application.Common.Interfaces;
|
|
using MediatR;
|
|
|
|
namespace DocumentOperator.Application.Features.Documents.ExtractSwissQrCode;
|
|
|
|
/// <summary>
|
|
/// Handles extraction of Swiss QR Code from PDF documents.
|
|
/// Uses ISwissQrCodeProcessor to extract QR code from the last page and parse it.
|
|
/// </summary>
|
|
public sealed class ExtractSwissQrCodeHandler : IRequestHandler<ExtractSwissQrCodeQuery, ExtractSwissQrCodeResult>
|
|
{
|
|
private readonly ISwissQrCodeProcessor _qrCodeProcessor;
|
|
|
|
public ExtractSwissQrCodeHandler(ISwissQrCodeProcessor qrCodeProcessor)
|
|
{
|
|
_qrCodeProcessor = qrCodeProcessor;
|
|
}
|
|
|
|
public async Task<ExtractSwissQrCodeResult> Handle(ExtractSwissQrCodeQuery request, CancellationToken cancellationToken)
|
|
{
|
|
// Convert Base64 string to byte array
|
|
byte[] pdfBytes = request.PdfContent.ToByteArray();
|
|
|
|
// Extract and parse Swiss QR Code from last page
|
|
var qrCodeData = await _qrCodeProcessor.ExtractSwissQrCodeAsync(pdfBytes, cancellationToken);
|
|
|
|
// Return references (passed through) + QR code data
|
|
return new ExtractSwissQrCodeResult(
|
|
References: request.References,
|
|
QrCodeData: qrCodeData
|
|
);
|
|
}
|
|
}
|