ускорение reminders
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 2m7s

This commit is contained in:
gorbenko.pavel
2026-08-18 10:58:34 +05:00
parent 36fb71da02
commit a2672042d7
@@ -38,23 +38,28 @@ public sealed class ReminderService(
.Where(x => x.SlaHours != null && x.ListId != null && x.SiteUrl != null)
.ToListAsync(cancellationToken);
var reminders = new List<ReminderDto>();
// Типы независимы (разные сайты/списки в SharePoint) — их обход
// распараллелен, иначе время растёт линейно с числом типов: каждый тип
// сам по себе делает несколько последовательных HTTP-запросов.
var results = await Task.WhenAll(types.Select(type => GetOverdueForTypeSafeAsync(type, now, cancellationToken)));
foreach (var type in types)
return Result.Ok<IReadOnlyList<ReminderDto>>(results.SelectMany(r => r).ToList());
}
private async Task<IReadOnlyList<ReminderDto>> GetOverdueForTypeSafeAsync(
RequestType type, DateTimeOffset now, CancellationToken cancellationToken)
{
try
{
try
{
reminders.AddRange(await GetOverdueForTypeAsync(type, now, cancellationToken));
}
catch (Exception e)
{
// Недоступный список одного типа не должен обнулять напоминания по
// всем остальным: Power Automate получит то, что удалось собрать.
logger.LogError(e, "Напоминания по типу заявки «{Type}» не собраны", type.Name);
}
return await GetOverdueForTypeAsync(type, now, cancellationToken);
}
catch (Exception e)
{
// Недоступный список одного типа не должен обнулять напоминания по
// всем остальным: Power Automate получит то, что удалось собрать.
logger.LogError(e, "Напоминания по типу заявки «{Type}» не собраны", type.Name);
return [];
}
return Result.Ok<IReadOnlyList<ReminderDto>>(reminders);
}
private async Task<IReadOnlyList<ReminderDto>> GetOverdueForTypeAsync(