using AutoMapper; using DocumentService.Application.Common.DTOs; using DocumentService.Application.Common.Interfaces; using MediatR; namespace DocumentService.Application.ValidatePdf.Queries; /// /// Query for PDF validation (Stream-based) /// public record ValidatePdfQuery : IRequest { /// /// PDF as stream (caller is responsible for disposal) /// public required Stream PdfStream { get; init; } } /// /// Handler for ValidatePdfQuery /// Orchestrates PDF validation using IPdfProcessor and AutoMapper /// public class ValidatePdfQueryHandler(IPdfProcessor PdfProcessor, IMapper Mapper) : IRequestHandler { /// /// Validates PDF and returns metadata /// public async Task Handle(ValidatePdfQuery request, CancellationToken cancellationToken) { // Call DevExpress service directly with stream (exceptions propagate naturally) var metadata = await PdfProcessor.ValidateAsync(request.PdfStream); // Map DTO to response DTO using AutoMapper return Mapper.Map(metadata); } }