using DD.Persistence.Models;
using DD.Persistence.Models.Common;
using DD.Persistence.Models.Requests;
using Refit;
namespace DD.Persistence.Client.Clients.Interfaces.Refit;
///
/// Refit интерфейс для IRefitChangeLogClient
///
public interface IRefitChangeLogClient : IRefitClient, IDisposable
{
private const string BaseRoute = "/api/ChangeLog";
///
/// Импорт с заменой: удаление старых строк и добавление новых
///
[Post($"{BaseRoute}/replace/{{idDiscriminator}}")]
Task> ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token);
///
/// Получение актуальных данных на определенную дату (с пагинацией)
///
[Get($"{BaseRoute}/moment/{{idDiscriminator}}")]
Task>> GetByDate(
Guid idDiscriminator,
DateTimeOffset moment,
[Query] PaginationRequest paginationRequest,
CancellationToken token);
///
/// Получение исторических данных за определенный период времени
///
[Get($"{BaseRoute}/history/{{idDiscriminator}}")]
Task>> GetChangeLogForInterval(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token);
///
/// Добавить одну запись
///
[Post($"{BaseRoute}/{{idDiscriminator}}")]
Task> Add(Guid idDiscriminator, ChangeLogValuesDto dto, CancellationToken token);
///
/// Добавить несколько записей
///
[Post($"{BaseRoute}/range/{{idDiscriminator}}")]
Task> AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token);
///
/// Обновить одну запись
///
[Put($"{BaseRoute}")]
Task> Update(ChangeLogValuesDto dto, CancellationToken token);
///
/// Обновить несколько записей
///
[Put($"{BaseRoute}/range")]
Task> UpdateRange(IEnumerable dtos, CancellationToken token);
///
/// Удалить одну запись
///
[Delete($"{BaseRoute}")]
Task> Delete(Guid id, CancellationToken token);
///
/// Удалить несколько записей
///
[Delete($"{BaseRoute}/range")]
Task> DeleteRange([Body] IEnumerable ids, CancellationToken token);
///
/// Получение списка дат, в которые происходили изменения (день, месяц, год, без времени)
///
[Get($"{BaseRoute}/datesRange/{{idDiscriminator}}")]
Task> GetDatesRange(Guid idDiscriminator, CancellationToken token);
}