using AsbCloudApp.Data;
using AsbCloudApp.Requests;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Repositories;
///
/// Репозиторий для записей с историей
///
public interface IChangeLogRepository
where TDto : IId
{
///
/// Добавление записей
///
/// пользователь, который добавляет
///
///
///
Task InsertRange(int idUser, IEnumerable dtos, CancellationToken token);
///
/// Редактирование записей
///
/// пользователь, который редактирует
///
///
///
Task UpdateRange(int idUser, IEnumerable dtos, CancellationToken token);
///
/// Добавляет Dto у которых id == 0, изменяет dto у которых id != 0
///
/// пользователь, который редактирует или добавляет
///
///
///
Task UpdateOrInsertRange(int idUser, IEnumerable dtos, CancellationToken token);
///
/// Помечает записи как удаленные
///
/// пользователь, который чистит
/// Фильтр по свойствам конкретной сущности
///
///
Task Clear(int idUser, TRequest request, CancellationToken token);
///
/// Очистить и добавить новые
///
///
///
///
///
///
Task ClearAndInsertRange(int idUser, TRequest request, IEnumerable dtos, CancellationToken token);
///
/// Пометить записи как удаленные
///
///
///
///
///
Task MarkAsDeleted(int idUser, IEnumerable ids, CancellationToken token);
///
/// Получение дат изменений записей
///
///
///
///
Task> GetDatesChange(TRequest request, CancellationToken token);
///
/// Получение измененных записей за определенную дату
///
///
/// Фильтр по дате. Если null - вернет все записи, без привязки к дате
///
///
Task>> GetChangeLogForDate(TRequest request, DateOnly? date, CancellationToken token);
///
/// Получение текущих сейчас записей по параметрам
///
///
///
///
Task> GetCurrent(TRequest request, CancellationToken token);
///
/// Получение объекта, реализующего интерфейс IChangeLogRepositoryBuilder
/// для последующих вызовов методов фильтрации по запросам
///
///
IChangeLogQueryBuilder GetQueryBuilder(ChangeLogRequest request);
}