refactor(templateMatcher): Переход на Pipeline-архитектуру для SimpleSync и GroupedSync.
- SimpleTemplateSynchronizer и GroupedTemplateSynchronizer переведены на паттерн Pipeline с разделением на Read/Write этапы - Выделены контракты этапов (ISimpleSyncStage, IGroupedSyncStage) и контексты (SimpleSyncContext, GroupedSyncContext) - Read-этапы безопасны для тестов (не пишут в БД/MQ), Write-этапы изолированы через отдельные интерфейсы - Добавлено [Perf]-логирование каждого этапа с метриками времени выполнения - Логи приведены к человекочитаемому формату 'Имя' (ID) для Job, JobGroup и Unit - Устранено дублирование данных в контекстах (FilteredUnits перезаписывается, TemplateGroups строго типизирован) - Константы неиспользуемых шаблонов вынесены в UnusedTemplateConstants - Структура проекта реорганизована: SimpleSync, GroupedSync, Implementations, Interfaces
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using PARR.Domain.Entities;
|
||||
using PARR.Domain.Entities.Base.History;
|
||||
using PARR.Domain.Entities.Job;
|
||||
|
||||
namespace PARR.TemplateMatcher.Services.SimpleSync
|
||||
{
|
||||
/// <summary>
|
||||
/// Контекст синхронизации простого шаблона. Передаётся между этапами.
|
||||
/// </summary>
|
||||
public class SimpleSyncContext
|
||||
{
|
||||
public Guid JobId { get; init; }
|
||||
public string JobName { get; set; } = string.Empty;
|
||||
public HistoryInitiator Initiator { get; init; } = null!;
|
||||
public Job Job { get; set; } = null!;
|
||||
public HashSet<Guid> FilteredUnitIds { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Имена юнитов для логирования. Заполняется на этапе фильтрации.
|
||||
/// </summary>
|
||||
public Dictionary<Guid, string> UnitNames { get; set; } = new();
|
||||
|
||||
public List<Template> ExistingUsedTemplates { get; set; } = new();
|
||||
public List<Guid> NewUnitIds { get; set; } = new();
|
||||
public List<Template> UnusedTemplates { get; set; } = new();
|
||||
public List<(Template Template, string ExpectedName)> TemplatesToRename { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает строку вида 'Имя' (ID) для логирования.
|
||||
/// Если имя неизвестно — возвращает только ID.
|
||||
/// </summary>
|
||||
public string FormatUnit(Guid unitId)
|
||||
{
|
||||
return UnitNames.TryGetValue(unitId, out var name)
|
||||
? $"'{name}' ({unitId})"
|
||||
: $"({unitId})";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user