using DD.Persistence.Models;
using DD.Persistence.Models.Common;
using Refit;
namespace DD.Persistence.Client.Clients.Interfaces.Refit;
///
/// Refit интерфейс для TimestampedValuesController
///
public interface IRefitTimestampedValuesClient : IRefitClient, IDisposable
{
private const string baseUrl = "/api/TimestampedValues";
///
/// Записать новые данные
///
[Post($"{baseUrl}/{{discriminatorId}}")]
Task> AddRange(Guid discriminatorId, IEnumerable dtos, CancellationToken token);
///
/// Получение данных с фильтрацией для нескольких систем
///
[Get($"{baseUrl}/{{discriminatorId}}")]
Task>> Get(Guid discriminatorId,
DateTimeOffset? timestampBegin,
[Query(CollectionFormat.Multi)] IEnumerable? columnNames,
int skip,
int take,
CancellationToken token);
///
/// Получение данных с фильтрацией
///
[Get($"{baseUrl}")]
Task>> Get([Query(CollectionFormat.Multi)] IEnumerable discriminatorIds,
DateTimeOffset? timestampBegin,
[Query(CollectionFormat.Multi)] IEnumerable? columnNames,
int skip,
int take,
CancellationToken token);
///
/// Получить данные, начиная с заданной отметки времени
///
[Get($"{baseUrl}/{{discriminatorId}}/gtdate")]
Task>> GetGtDate(Guid discriminatorId, DateTimeOffset timestampBegin, CancellationToken token);
///
/// Получить данные c начала
///
[Get($"{baseUrl}/{{discriminatorId}}/first")]
Task>> GetFirst(Guid discriminatorId, int take, CancellationToken token);
///
/// Получить данные c конца
///
[Get($"{baseUrl}/{{discriminatorId}}/last")]
Task>> GetLast(Guid discriminatorId, int take, CancellationToken token);
///
/// Получить список объектов с прореживанием, удовлетворяющий диапазону временных отметок
///
[Get($"{baseUrl}/{{discriminatorId}}/resampled")]
Task>> GetResampledData(Guid discriminatorId, DateTimeOffset timestampBegin, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default);
///
/// Получить количество записей по указанному набору в БД. Для пагинации
///
[Get($"{baseUrl}/{{discriminatorId}}/count")]
Task> Count(Guid discriminatorId, CancellationToken token);
///
/// Получить диапазон дат, в пределах которых хранятся даные
///
[Get($"{baseUrl}/{{discriminatorId}}/datesRange")]
Task> GetDatesRange(Guid discriminatorId, CancellationToken token);
}