using DocumentOperator.Application.Common.Interfaces; using FluentValidation; using MediatR; namespace DocumentOperator.Application.ExtractPdfAttachments; /// /// Command to extract all embedded files from a PDF document and return as ZIP archive. /// public record ExtractPdfAttachmentsCommand : IRequest { /// /// PDF document stream. Must be positioned at the beginning (Position = 0). /// public required Stream PdfStream { get; init; } } /// /// Handler for ExtractPdfAttachmentsCommand. /// Extracts all embedded files from PDF and returns as ZIP archive. /// public class ExtractPdfAttachmentsCommandHandler(IPdfProcessor pdfProcessor) : IRequestHandler { public async Task Handle(ExtractPdfAttachmentsCommand request, CancellationToken cancellationToken) { // Delegate to infrastructure layer return await pdfProcessor.ExtractAttachmentsAsync(request.PdfStream); } } /// /// Validator for ExtractPdfAttachmentsCommand. /// public class ExtractPdfAttachmentsCommandValidator : AbstractValidator { public ExtractPdfAttachmentsCommandValidator() { RuleFor(x => x.PdfStream) .NotNull() .WithMessage("PDF stream is required"); } }