using DD.Persistence.Models;
using DD.Persistence.Models.Common;
namespace DD.Persistence.Client.Clients.Interfaces;
///
/// Клиент для работы с репозиторием для хранения разных наборов данных рядов.
/// discriminatorId - идентифицирует конкретный набор данных, прим.: циклы измерения АСИБР, или отчет о DrillTest.
/// discriminatorId формируют клиенты и только им известно что они обозначают.
///
public interface ITimestampedValuesClient : IDisposable
{
///
/// Записать новые данные
/// Предполагается что данные с одним дискриминатором имеют одинаковую структуру
///
/// Дискриминатор (идентификатор) набора
///
///
Task AddRange(Guid discriminatorId, IEnumerable dtos, CancellationToken token);
///
/// Получить данные с фильтрацией. Значение фильтра null - отключен
///
/// Дискриминатор (идентификатор) набора
/// Фильтр позднее даты
/// Фильтр свойств набора
///
///
///
Task> Get(Guid discriminatorId, DateTimeOffset? timestampBegin, IEnumerable? columnNames, int skip, int take, CancellationToken token);
///
/// Получить данные, начиная с заданной отметки времени
///
/// Дискриминатор (идентификатор) набора
/// Фильтр позднее даты
///
Task> GetGtDate(Guid discriminatorId, DateTimeOffset timestampBegin, CancellationToken token);
///
/// Получить данные с начала
///
/// Дискриминатор (идентификатор) набора
///
///
Task> GetFirst(Guid discriminatorId, int take, CancellationToken token);
///
/// Получить данные с конца
///
/// Дискриминатор (идентификатор) набора
///
///
Task> GetLast(Guid discriminatorId, int take, CancellationToken token);
///
/// Получить данные с прореживанием, удовлетворяющем диапазону дат
///
/// Дискриминатор (идентификатор) набора
///
///
///
///
Task> GetResampledData(Guid discriminatorId, DateTimeOffset timestampBegin, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default);
///
/// Количество записей по указанному набору в БД. Для пагинации
///
/// Дискриминатор (идентификатор) набора
///
Task Count(Guid discriminatorId, CancellationToken token);
///
/// Диапазон дат, в пределах которых осуществляется хранение данных
///
/// Дискриминатор (идентификатор) набора
///
Task GetDatesRange(Guid discriminatorId, CancellationToken token);
}