using PARR.Domain.Entities;
namespace PARR.EsppSync
{
///
/// Делегат парсинга из строки в модель EsppObject
///
///
///
///
public delegate EsppObject? ParseStringToEsppObject(string str) where EsppObject : class, IEsppObject;
///
/// Конвертирует Template в модель для сравнения
///
///
///
///
public delegate EsppObject ConvertDbToEsppObject(Template template) where EsppObject : class, IEsppObject;
///
/// Дополнительная проверка полей, если проверка прошла, то true
///
///
///
///
///
/// true - проверка пройдена, false - проверка не пройдена
public delegate Task CustomComparisionCheckAsync(EsppObject esppObject, EsppObject dbObject, Guid templateId) where EsppObject : class, IEsppObject;
///
/// Выполнить произвольную логику после парсинга строки в объект ЕСПП
///
///
///
///
public delegate Task AfterParseStringToEsppObjectAsync(EsppObject esppObject) where EsppObject : class, IEsppObject;
public interface ISyncService where EsppObject : class, IEsppObject
{
///
/// Синхронизировать объекты
///
/// Строка из RabbitMQ
/// Делегат парсинга из строки в модель EsppObject
/// Конвертирует BD Template в модель для сравнения
/// Кастомное сравнение полей
/// Выполнить произвольный метод после парсинга строки в модель EsppObject
///
Task SyncEsppObjectAsync(string str,
ParseStringToEsppObject parseStringToEsppObject,
ConvertDbToEsppObject converterDbToEsppObject,
CustomComparisionCheckAsync? customComparisionAsync = null,
AfterParseStringToEsppObjectAsync? afterParseStringToEsppObjectAsync = null
);
}
}