- SimpleTemplateSynchronizer и GroupedTemplateSynchronizer переведены на паттерн Pipeline с разделением на Read/Write этапы - Выделены контракты этапов (ISimpleSyncStage, IGroupedSyncStage) и контексты (SimpleSyncContext, GroupedSyncContext) - Read-этапы безопасны для тестов (не пишут в БД/MQ), Write-этапы изолированы через отдельные интерфейсы - Добавлено [Perf]-логирование каждого этапа с метриками времени выполнения - Логи приведены к человекочитаемому формату 'Имя' (ID) для Job, JobGroup и Unit - Устранено дублирование данных в контекстах (FilteredUnits перезаписывается, TemplateGroups строго типизирован) - Константы неиспользуемых шаблонов вынесены в UnusedTemplateConstants - Структура проекта реорганизована: SimpleSync, GroupedSync, Implementations, Interfaces
38 lines
1.6 KiB
C#
38 lines
1.6 KiB
C#
using PARR.Core.Services.UnitFilterService.Models;
|
|
using PARR.Domain.Entities.Base.History;
|
|
using PARR.Domain.Entities.Job;
|
|
using PARR.TemplateMatcher.Models;
|
|
|
|
namespace PARR.TemplateMatcher.Services.Implementations.GroupedSync;
|
|
|
|
/// <summary>
|
|
/// Контекст групповой синхронизации. Передаётся между этапами.
|
|
/// </summary>
|
|
public class GroupedSyncContext
|
|
{
|
|
public Guid JobGroupId { get; init; }
|
|
public string JobGroupName { get; set; } = string.Empty;
|
|
public HistoryInitiator Initiator { get; init; } = null!;
|
|
public JobGroup JobGroup { get; set; } = null!;
|
|
public List<Job> JobsInGroup { get; set; } = new();
|
|
public Job MaxJob { get; set; } = null!;
|
|
public List<UnitFilterResultDto> FilteredUnits { get; set; } = new();
|
|
public Dictionary<Guid, List<Guid>> ReverseMapping { get; set; } = new();
|
|
public List<GroupedTemplateGroup> TemplateGroups { get; set; } = new();
|
|
public HashSet<(Guid JobId, Guid UnitId, int Index)> ExpectedTemplateKeys { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Имена юнитов для логирования. Заполняется на этапе фильтрации.
|
|
/// </summary>
|
|
public Dictionary<Guid, string> UnitNames { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// Возвращает строку вида 'Имя' (ID) для логирования.
|
|
/// </summary>
|
|
public string FormatUnit(Guid unitId)
|
|
{
|
|
return UnitNames.TryGetValue(unitId, out var name)
|
|
? $"'{name}' ({unitId})"
|
|
: $"({unitId})";
|
|
}
|
|
} |