using System;
using JetBrains.Annotations;
using KL.DTS.Common.Models;
using KL.DTS.Common.Models.DataService;
using KL.DTS.Services.Common.Services;
namespace KL.DTS.Services.DataAccess.Services
{
/// <summary>
/// Представляет методы конвертации модели в сущности базы данных и обратно.
/// </summary>
internal interface IEntityConverter
{
/// <summary>
/// Получить функцию для конвертации из DTO в EF.
/// </summary>
[NotNull]
Func<EntityBase, TransformerOptions, IDbEntity> FromDtoConverter();
/// <summary>
/// Получить функцию для конвертации из EF модели в DTO.
/// </summary>
[NotNull]
Func<IDbEntity, TransformerOptions, EntityBase> ToDtoConverter();
/// <summary>
/// Получить Action прописывающий детали в EF сущность.
/// </summary>
[NotNull]
Action<IDbEntity> GetDetailsProvider();
/// <summary>
/// Получить Action прописывающий детали в EF сущность.
/// </summary>
[NotNull]
Action<IDbEntity> GetDetailsProvider([NotNull] IDbEntityResolver resolver);
}
/// <summary>
/// Представляет методы конвертации модели в сущности базы данных и обратно.
/// </summary>
/// <typeparam name="TModel">Тип модели</typeparam>
internal interface IEntityConverter<TModel> : IEntityConverter
{
/// <summary>
/// Получить функцию для конвертации из DTO в EF.
/// </summary>
[NotNull]
new Func<TModel, TransformerOptions, IDbEntity> FromDtoConverter();
/// <summary>
/// Получить функцию для конвертации из EF модели в DTO.
/// </summary>
[NotNull]
new Func<IDbEntity, TransformerOptions, TModel> ToDtoConverter();
}
/// <summary>
/// Представляет методы конвертации модели в сущности базы данных и обратно.
/// </summary>
/// <typeparam name="TModel">Тип модели</typeparam>
/// <typeparam name="TDbEntity">Тип сущности базы данных.</typeparam>
internal interface IEntityConverter<TModel, TDbEntity> : IEntityConverter<TModel>
{
}
}