34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
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<DownloadRegistrationsExcelQuery, DownloadRegistrationsExcelResult>
|
|
{
|
|
public async Task<DownloadRegistrationsExcelResult> 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);
|
|
}
|
|
}
|