using Events.FilesAPI.Infrastructure.Files; using Events.FilesAPI.Features.RegistrationsExcel.Synchronize; using Events.WebAPI.Handlers.EF.Data.Postgres; using Microsoft.EntityFrameworkCore; using MediatR; namespace Events.FilesAPI.Features.RegistrationsExcel.Download; public sealed class DownloadRegistrationsExcelHandler( EventsContext context, RegistrationsExcelFileGenerator generator, RegistrationsExcelFileLocator fileLocator) : IRequestHandler { public async Task Handle(DownloadRegistrationsExcelQuery request, CancellationToken cancellationToken) { bool exists = await context.Events .AsNoTracking() .AnyAsync(e => e.Id == request.EventId, cancellationToken); if (!exists) return new DownloadRegistrationsExcelResult(false, null); GeneratedFileReference? file = fileLocator.TryGet(request.EventId); if (file == null) { await generator.GenerateAsync(request.EventId, cancellationToken); file = fileLocator.TryGet(request.EventId); } return new DownloadRegistrationsExcelResult(true, file); } }