feat(esppScheduleSync, esppSync): вынесена логика сравнения nextRun из EsppSync в EsppScheduleSync. Рефакторинг EsppScheduleSync - логика проверки имени шаблона

This commit is contained in:
Mikhail Trubnikov
2026-02-18 11:40:25 +10:00
parent d17f6cf409
commit 517d446bcf
6 changed files with 272 additions and 255 deletions

View File

@@ -8,7 +8,7 @@ namespace PARR.EsppSync
/// <typeparam name="EsppObject"></typeparam>
/// <param name="str"></param>
/// <returns></returns>
public delegate EsppObject? ParserHandlerDelegate<EsppObject>(string str) where EsppObject : class, IEsppObject;
public delegate EsppObject? ParseStringToEsppObject<EsppObject>(string str) where EsppObject : class, IEsppObject;
/// <summary>
/// Конвертирует Template в модель для сравнения
@@ -16,17 +16,44 @@ namespace PARR.EsppSync
/// <typeparam name="EsppObject"></typeparam>
/// <param name="templateName"></param>
/// <returns></returns>
public delegate EsppObject ConvertDbObjToComparisonObjHandlerDelegate<EsppObject>(Template template) where EsppObject : class, IEsppObject;
public delegate EsppObject ConvertDbToEsppObject<EsppObject>(Template template) where EsppObject : class, IEsppObject;
/// <summary>
/// Дополнительная проверка полей, если проверка прошла, то true
/// </summary>
/// <typeparam name="EsppObject"></typeparam>
/// <param name="esppObject"></param>
/// <param name="dbObject"></param>
/// <param name="templateId"></param>
/// <returns>true - проверка пройдена, false - проверка не пройдена</returns>
public delegate Task<bool> CustomComparisionCheckAsync<EsppObject>(EsppObject esppObject, EsppObject dbObject, Guid templateId) where EsppObject : class, IEsppObject;
/// <summary>
/// Выполнить произвольную логику после парсинга строки в объект ЕСПП
/// </summary>
/// <typeparam name="EsppObject"></typeparam>
/// <param name="esppObject"></param>
/// <returns></returns>
public delegate Task AfterParseStringToEsppObjectAsync<EsppObject>(EsppObject esppObject) where EsppObject : class, IEsppObject;
public interface ISyncService<EsppObject> where EsppObject : class, IEsppObject
{
/// <summary>
///
/// Синхронизировать объекты
/// </summary>
/// <param name="str">Строка из RabbitMQ</param>
/// <param name="parser">Делегат парсинга из строки в модель EsppObject</param>
/// <param name="converterToEsppObject"> Конвертирует BD Template в модель для сравнения</param>
/// <param name="parseStringToEsppObject">Делегат парсинга из строки в модель EsppObject</param>
/// <param name="converterDbToEsppObject"> Конвертирует BD Template в модель для сравнения</param>
/// <param name="customComparisionAsync">Кастомное сравнение полей</param>
/// <param name="afterParseStringToEsppObjectAsync">Выполнить произвольный метод после парсинга строки в модель EsppObject</param>
/// <returns></returns>
Task SyncEsppObjectAsync(string str, ParserHandlerDelegate<EsppObject> parser, ConvertDbObjToComparisonObjHandlerDelegate<EsppObject> converterToEsppObject);
Task SyncEsppObjectAsync(string str,
ParseStringToEsppObject<EsppObject> parseStringToEsppObject,
ConvertDbToEsppObject<EsppObject> converterDbToEsppObject,
CustomComparisionCheckAsync<EsppObject>? customComparisionAsync = null,
AfterParseStringToEsppObjectAsync<EsppObject>? afterParseStringToEsppObjectAsync = null
);
}
}