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