From a2672042d71e2fd0f31c19f5f4d3a9ea9efeaf8f Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Tue, 18 Aug 2026 10:58:34 +0500 Subject: [PATCH] =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20reminders?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reminders/ReminderService.cs | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/backend/Tnsu.ApprovalRoute.Application/Reminders/ReminderService.cs b/backend/Tnsu.ApprovalRoute.Application/Reminders/ReminderService.cs index 9fea9c6..1a62dc5 100644 --- a/backend/Tnsu.ApprovalRoute.Application/Reminders/ReminderService.cs +++ b/backend/Tnsu.ApprovalRoute.Application/Reminders/ReminderService.cs @@ -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(); + // Типы независимы (разные сайты/списки в SharePoint) — их обход + // распараллелен, иначе время растёт линейно с числом типов: каждый тип + // сам по себе делает несколько последовательных HTTP-запросов. + var results = await Task.WhenAll(types.Select(type => GetOverdueForTypeSafeAsync(type, now, cancellationToken))); - foreach (var type in types) + return Result.Ok>(results.SelectMany(r => r).ToList()); + } + + private async Task> 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>(reminders); } private async Task> GetOverdueForTypeAsync(