refactor: Change IPdfProcessor interface from byte[] to Stream

- ValidateAsync(byte[]) → ValidateAsync(Stream)
- ValidatePdfAAsync(byte[]) → ValidatePdfAAsync(Stream)
- CheckAttachmentsAsync(byte[]) → CheckAttachmentsAsync(Stream)
- Reason: Stream-based processing reduces memory footprint and enables pipeline parallelization
This commit is contained in:
2026-07-20 11:55:08 +02:00
parent d123bc996e
commit 73a7afe257

View File

@@ -1,4 +1,4 @@
using DocumentOperator.Domain.Models.ValueObjects; using DocumentOperator.Application.Common.DTOs;
namespace DocumentOperator.Application.Common.Interfaces; namespace DocumentOperator.Application.Common.Interfaces;
@@ -7,20 +7,30 @@ public interface IPdfProcessor
/// <summary> /// <summary>
/// Validates a PDF and extracts metadata. /// Validates a PDF and extracts metadata.
/// </summary> /// </summary>
/// <param name="pdfBytes">PDF content as byte array</param> /// <param name="pdfStream">PDF content as stream (caller is responsible for disposal)</param>
/// <returns>PDF metadata (page count, size, version, attachments)</returns> /// <returns>PDF metadata (page count, size, version, attachments)</returns>
/// <exception cref="Domain.Common.Exceptions.PdfProcessingException"> /// <exception cref="Domain.Common.Exceptions.BadRequestException">
/// Thrown when PDF is corrupted or cannot be processed /// Thrown when stream is empty or invalid
/// </exception> /// </exception>
Task<PdfMetadata> ValidateAsync(byte[] pdfBytes); Task<PdfMetadata> ValidateAsync(Stream pdfStream);
/// <summary> /// <summary>
/// Validates a PDF/A document and checks conformance level. /// Validates a PDF/A document and checks conformance level.
/// </summary> /// </summary>
/// <param name="pdfBytes">PDF content as byte array</param> /// <param name="pdfStream">PDF content as stream (caller is responsible for disposal)</param>
/// <returns>PDF/A metadata including conformance level and validation errors/warnings</returns> /// <returns>PDF/A metadata including conformance level and validation errors/warnings</returns>
/// <exception cref="Domain.Common.Exceptions.PdfProcessingException"> /// <exception cref="Domain.Common.Exceptions.BadRequestException">
/// Thrown when PDF is corrupted or cannot be processed /// Thrown when stream is empty or invalid
/// </exception> /// </exception>
Task<PdfAMetadata> ValidatePdfAAsync(byte[] pdfBytes); Task<PdfAMetadata> ValidatePdfAAsync(Stream pdfStream);
/// <summary>
/// Checks for embedded files (attachments) in a PDF document and returns detailed metadata.
/// </summary>
/// <param name="pdfStream">PDF content as stream (caller is responsible for disposal)</param>
/// <returns>Attachment information (count, file names, MIME types, sizes)</returns>
/// <exception cref="Domain.Common.Exceptions.BadRequestException">
/// Thrown when stream is empty or invalid
/// </exception>
Task<AttachmentInfo> CheckAttachmentsAsync(Stream pdfStream);
} }