using Persistence.Models; using Persistence.Models.Requests; namespace Persistence.Repositories; /// <summary> /// Интерфейс для работы с историческими данными /// </summary> /// <typeparam name="TDto"></typeparam> public interface IChangeLogRepository : ISyncWithDiscriminatorRepository<DataWithWellDepthAndSectionDto> { /// <summary> /// Добавление записей /// </summary> /// <param name="idAuthor">пользователь, который добавляет</param> /// <param name="idDiscriminator">ключ справочника</param> /// <param name="dtos"></param> /// <param name="token"></param> /// <returns></returns> Task<int> AddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable<DataWithWellDepthAndSectionDto> dtos, CancellationToken token); /// <summary> /// Пометить записи как удаленные /// </summary> /// <param name="idEditor"></param> /// <param name="ids">ключи записей</param> /// <param name="token"></param> /// <returns></returns> Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, CancellationToken token); /// <summary> /// Пометить записи как удаленные /// </summary> /// <param name="idEditor"></param> /// <param name="idDiscriminator">дискриминатор таблицы</param> /// <param name="token"></param> /// <returns></returns> Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, CancellationToken token); /// <summary> /// Очистить и добавить новые /// </summary> /// <param name="idAuthor"></param> /// <param name="idDiscriminator"></param> /// <param name="dtos"></param> /// <param name="token"></param> /// <returns></returns> Task<int> ClearAndAddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable<DataWithWellDepthAndSectionDto> dtos, CancellationToken token); /// <summary> /// Редактирование записей /// </summary> /// <param name="idEditor">пользователь, который редактирует</param> /// <param name="dtos"></param> /// <param name="token"></param> /// <returns></returns> Task<int> UpdateRange(Guid idEditor, IEnumerable<DataWithWellDepthAndSectionDto> dtos, CancellationToken token); /// <summary> /// Получение актуальных записей на определенный момент времени (с пагинацией) /// </summary> /// <param name="idDiscriminator"></param> /// <param name="moment">текущий момент времени</param> /// <param name="filterRequest">параметры запроса фильтрации</param> /// <param name="paginationRequest">параметры запроса пагинации</param> /// <param name="token"></param> /// <returns></returns> Task<PaginationContainer<DataWithWellDepthAndSectionDto>> GetByDate(Guid idDiscriminator, DateTimeOffset moment, SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token); /// <summary> /// Получение измененных записей за период времени /// </summary> /// <param name="idDiscriminator"></param> /// <param name="dateBegin"></param> /// <param name="dateEnd"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<ChangeLogDto>> GetChangeLogForInterval(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token); /// <summary> /// Получение списка дат, в которые происходили изменения (день, месяц, год, без времени) /// </summary> /// <param name="idDiscriminator"></param> /// <param name="token"></param> /// <returns></returns> Task<IEnumerable<DateOnly>> GetDatesChange(Guid idDiscriminator, CancellationToken token); }