diff --git a/DD.Persistence.API/Controllers/ChangeLogController.cs b/DD.Persistence.API/Controllers/ChangeLogController.cs index 8b788c4..e4d1c09 100644 --- a/DD.Persistence.API/Controllers/ChangeLogController.cs +++ b/DD.Persistence.API/Controllers/ChangeLogController.cs @@ -24,7 +24,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)] public async Task Add( [FromRoute] Guid idDiscriminator, - [FromBody] DataWithWellDepthAndSectionDto dto, + [FromBody] ChangeLogValuesDto dto, CancellationToken token) { var userId = User.GetUserId(); @@ -37,7 +37,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)] public async Task AddRange( [FromRoute] Guid idDiscriminator, - [FromBody] IEnumerable dtos, + [FromBody] IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); @@ -70,7 +70,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task ClearAndAddRange( [FromRoute] Guid idDiscriminator, - [FromBody] IEnumerable dtos, + [FromBody] IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); @@ -81,7 +81,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi [HttpPut] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task Update( - DataWithWellDepthAndSectionDto dto, + ChangeLogValuesDto dto, CancellationToken token) { var userId = User.GetUserId(); @@ -93,7 +93,7 @@ public class ChangeLogController : ControllerBase, IChangeLogApi [HttpPut("range")] [ProducesResponseType(typeof(int), (int)HttpStatusCode.OK)] public async Task UpdateRange( - IEnumerable dtos, + IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); @@ -103,29 +103,27 @@ public class ChangeLogController : ControllerBase, IChangeLogApi } [HttpGet("{idDiscriminator}")] - [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] + [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] public async Task GetCurrent( [FromRoute] Guid idDiscriminator, - [FromQuery] SectionPartRequest filterRequest, [FromQuery] PaginationRequest paginationRequest, CancellationToken token) { var moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero); - var result = await repository.GetByDate(idDiscriminator, moment, filterRequest, paginationRequest, token); + var result = await repository.GetByDate(idDiscriminator, moment, paginationRequest, token); return Ok(result); } [HttpGet("moment/{idDiscriminator}")] - [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] + [ProducesResponseType(typeof(PaginationContainer), (int)HttpStatusCode.OK)] public async Task GetByDate( [FromRoute] Guid idDiscriminator, DateTimeOffset moment, - [FromQuery] SectionPartRequest filterRequest, [FromQuery] PaginationRequest paginationRequest, CancellationToken token) { - var result = await repository.GetByDate(idDiscriminator, moment, filterRequest, paginationRequest, token); + var result = await repository.GetByDate(idDiscriminator, moment, paginationRequest, token); return Ok(result); } @@ -155,9 +153,9 @@ public class ChangeLogController : ControllerBase, IChangeLogApi } [HttpGet("part/{idDiscriminator}")] - [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] + [ProducesResponseType(typeof(IEnumerable), (int)HttpStatusCode.OK)] [ProducesResponseType((int)HttpStatusCode.NoContent)] - public async Task>> GetPart([FromRoute] Guid idDiscriminator, DateTimeOffset dateBegin, int take = 86400, CancellationToken token = default) + public async Task>> GetPart([FromRoute] Guid idDiscriminator, DateTimeOffset dateBegin, int take = 86400, CancellationToken token = default) { var result = await repository.GetGtDate(idDiscriminator, dateBegin, token); diff --git a/DD.Persistence.Client/Clients/ChangeLogClient.cs b/DD.Persistence.Client/Clients/ChangeLogClient.cs index e4f5904..fa73ba9 100644 --- a/DD.Persistence.Client/Clients/ChangeLogClient.cs +++ b/DD.Persistence.Client/Clients/ChangeLogClient.cs @@ -7,16 +7,19 @@ using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Models.Common; namespace DD.Persistence.Client.Clients; +/// public class ChangeLogClient : BaseClient, IChangeLogClient { private readonly IRefitChangeLogClient refitChangeLogClient; + /// public ChangeLogClient(IRefitClientFactory refitClientFactory, ILogger logger) : base(logger) { this.refitChangeLogClient = refitClientFactory.Create(); } - public async Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token) + /// + public async Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var result = await ExecuteGetResponse( async () => await refitChangeLogClient.ClearAndAddRange(idDiscriminator, dtos, token), token); @@ -24,15 +27,17 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } - public async Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, - SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token) + /// + public async Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, + PaginationRequest paginationRequest, CancellationToken token) { var result = await ExecuteGetResponse( - async () => await refitChangeLogClient.GetByDate(idDiscriminator, moment, filterRequest, paginationRequest, token), token); + async () => await refitChangeLogClient.GetByDate(idDiscriminator, moment, paginationRequest, token), token); - return result; + return result!; } + /// public async Task> GetChangeLogForInterval(Guid idDiscriminator, DateTimeOffset dateBegin, DateTimeOffset dateEnd, CancellationToken token) { var result = await ExecuteGetResponse( @@ -41,7 +46,8 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result!; } - public async Task Add(Guid idDiscriminator, DataWithWellDepthAndSectionDto dto, CancellationToken token) + /// + public async Task Add(Guid idDiscriminator, ChangeLogValuesDto dto, CancellationToken token) { var result = await ExecutePostResponse( async () => await refitChangeLogClient.Add(idDiscriminator, dto, token), token); @@ -49,7 +55,8 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } - public async Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token) + /// + public async Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var result = await ExecutePostResponse( async () => await refitChangeLogClient.AddRange(idDiscriminator, dtos, token), token); @@ -57,7 +64,8 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } - public async Task Update(DataWithWellDepthAndSectionDto dto, CancellationToken token) + /// + public async Task Update(ChangeLogValuesDto dto, CancellationToken token) { var result = await ExecutePostResponse( async () => await refitChangeLogClient.Update(dto, token), token); @@ -65,7 +73,8 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } - public async Task UpdateRange(IEnumerable dtos, CancellationToken token) + /// + public async Task UpdateRange(IEnumerable dtos, CancellationToken token) { var result = await ExecutePostResponse( async () => await refitChangeLogClient.UpdateRange(dtos, token), token); @@ -73,6 +82,7 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } + /// public async Task Delete(Guid id, CancellationToken token) { var result = await ExecutePostResponse( @@ -81,6 +91,7 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } + /// public async Task DeleteRange(IEnumerable ids, CancellationToken token) { var result = await ExecutePostResponse( @@ -89,6 +100,7 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } + /// public async Task GetDatesRange(Guid idDiscriminator, CancellationToken token) { var result = await ExecuteGetResponse( @@ -97,6 +109,7 @@ public class ChangeLogClient : BaseClient, IChangeLogClient return result; } + /// public void Dispose() { refitChangeLogClient.Dispose(); diff --git a/DD.Persistence.Client/Clients/Interfaces/IChangeLogClient.cs b/DD.Persistence.Client/Clients/Interfaces/IChangeLogClient.cs index f81ac8d..16a491c 100644 --- a/DD.Persistence.Client/Clients/Interfaces/IChangeLogClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/IChangeLogClient.cs @@ -16,7 +16,7 @@ public interface IChangeLogClient : IDisposable /// /// /// - Task Add(Guid idDiscriminator, DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task Add(Guid idDiscriminator, ChangeLogValuesDto dto, CancellationToken token); /// /// Добавить несколько записей @@ -25,7 +25,7 @@ public interface IChangeLogClient : IDisposable /// /// /// - Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Импорт с заменой: удаление старых строк и добавление новых @@ -34,7 +34,7 @@ public interface IChangeLogClient : IDisposable /// /// /// - Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Удалить одну запись @@ -57,11 +57,10 @@ public interface IChangeLogClient : IDisposable /// /// /// - /// /// /// /// - Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token); + Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, PaginationRequest paginationRequest, CancellationToken token); /// /// Получение исторических данных за определенный период времени @@ -87,7 +86,7 @@ public interface IChangeLogClient : IDisposable /// /// /// - Task Update(DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task Update(ChangeLogValuesDto dto, CancellationToken token); /// /// Обновить несколько записей @@ -95,5 +94,5 @@ public interface IChangeLogClient : IDisposable /// /// /// - Task UpdateRange(IEnumerable dtos, CancellationToken token); + Task UpdateRange(IEnumerable dtos, CancellationToken token); } \ No newline at end of file diff --git a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitChangeLogClient.cs b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitChangeLogClient.cs index 8e35b4e..a07fac3 100644 --- a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitChangeLogClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitChangeLogClient.cs @@ -5,42 +5,74 @@ 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); + Task> ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + /// + /// Получение актуальных данных на определенную дату (с пагинацией) + /// [Get($"{BaseRoute}/moment/{{idDiscriminator}}")] - Task>> GetByDate( + Task>> GetByDate( Guid idDiscriminator, DateTimeOffset moment, - [Query] SectionPartRequest filterRequest, [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, DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task> Add(Guid idDiscriminator, ChangeLogValuesDto dto, CancellationToken token); + /// + /// Добавить несколько записей + /// [Post($"{BaseRoute}/range/{{idDiscriminator}}")] - Task> AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task> AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + /// + /// Обновить одну запись + /// [Put($"{BaseRoute}")] - Task> Update(DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task> Update(ChangeLogValuesDto dto, CancellationToken token); + /// + /// Обновить несколько записей + /// [Put($"{BaseRoute}/range")] - Task> UpdateRange(IEnumerable dtos, CancellationToken token); + 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); diff --git a/DD.Persistence.Database/Entity/ChangeLog.cs b/DD.Persistence.Database/Entity/ChangeLog.cs index d874ea2..7b489ea 100644 --- a/DD.Persistence.Database/Entity/ChangeLog.cs +++ b/DD.Persistence.Database/Entity/ChangeLog.cs @@ -10,7 +10,7 @@ namespace DD.Persistence.Database.Model; /// /// Часть записи, описывающая изменение /// -public class ChangeLog : IChangeLog, IWithSectionPart +public class ChangeLog : IChangeLog { [Key, Comment("Ключ записи")] public Guid Id { get; set; } @@ -33,15 +33,6 @@ public class ChangeLog : IChangeLog, IWithSectionPart [Comment("Id заменяющей записи")] public Guid? IdNext { get; set; } - [Comment("Глубина забоя на дату начала интервала")] - public double DepthStart { get; set; } - - [Comment("Глубина забоя на дату окончания интервала")] - public double DepthEnd { get; set; } - - [Comment("Ключ секции")] - public Guid IdSection { get; set; } - [Column(TypeName = "jsonb"), Comment("Значение")] public required IDictionary Value { get; set; } } diff --git a/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs index 64419e7..947a196 100644 --- a/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs @@ -52,7 +52,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest var insertedCount = 10; var createdResult = CreateChangeLogItems(insertedCount, (-15, 15)); var idDiscriminator = createdResult.Item1; - var dtos = createdResult.Item2.Select(e => e.Adapt()); + var dtos = createdResult.Item2.Select(e => e.Adapt()); // act var result = await client.ClearAndAddRange(idDiscriminator, dtos, new CancellationToken()); @@ -106,8 +106,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest var entity = dbContext.ChangeLog .Where(x => x.IdDiscriminator == idDiscriminator) .FirstOrDefault(); - dto = entity.Adapt(); - dto.DepthEnd += 10; + dto = entity.Adapt(); // act result = await client.Update(dto, new CancellationToken()); @@ -149,12 +148,9 @@ public class ChangeLogControllerTest : BaseIntegrationTest dbContext.ChangeLog.AddRange(entities); dbContext.SaveChanges(); - dtos = entities.Select(c => new DataWithWellDepthAndSectionDto() + dtos = entities.Select(c => new ChangeLogValuesDto() { - DepthEnd = c.DepthEnd + 10, - DepthStart = c.DepthStart + 10, Id = c.Id, - IdSection = c.IdSection, Value = c.Value }).ToArray(); @@ -245,12 +241,6 @@ public class ChangeLogControllerTest : BaseIntegrationTest var deletedCount = await client.DeleteRange(idsToDelete, new CancellationToken()); - var filterRequest = new SectionPartRequest() - { - DepthStart = 0, - DepthEnd = 1000, - }; - var paginationRequest = new PaginationRequest() { Skip = 0, @@ -259,7 +249,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest }; var moment = DateTimeOffset.UtcNow.AddDays(16); - var result = await client.GetByDate(idDiscriminator, moment, filterRequest, paginationRequest, new CancellationToken()); + var result = await client.GetByDate(idDiscriminator, moment, paginationRequest, new CancellationToken()); Assert.NotNull(result); @@ -292,11 +282,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest var idDiscriminator = changeLogItems.Item1; var entities = changeLogItems.Item2; - foreach (var entity in entities) - { - entity.DepthEnd += 10; - } - var dtos = entities.Select(e => e.Adapt()).ToArray(); + var dtos = entities.Select(e => e.Adapt()).ToArray(); await client.UpdateRange(dtos, new CancellationToken()); //act @@ -310,19 +296,16 @@ public class ChangeLogControllerTest : BaseIntegrationTest } - private static IEnumerable Generate(int count) + private static IEnumerable Generate(int count) { for (int i = 0; i < count; i++) - yield return new DataWithWellDepthAndSectionDto() + yield return new ChangeLogValuesDto() { Value = new Dictionary() { { "Key", 1 } }, - DepthStart = generatorRandomDigits.Next(1, 5), - DepthEnd = generatorRandomDigits.Next(5, 15), - Id = Guid.NewGuid(), - IdSection = Guid.NewGuid() + Id = Guid.NewGuid() }; } diff --git a/DD.Persistence.Models/ChangeLogDto.cs b/DD.Persistence.Models/ChangeLogDto.cs index 8f2725b..d277bd8 100644 --- a/DD.Persistence.Models/ChangeLogDto.cs +++ b/DD.Persistence.Models/ChangeLogDto.cs @@ -38,5 +38,5 @@ public class ChangeLogDto /// /// Объект записи /// - public DataWithWellDepthAndSectionDto Value { get; set; } = default!; + public ChangeLogValuesDto Value { get; set; } = default!; } diff --git a/DD.Persistence.Models/ChangeLogValuesDto.cs b/DD.Persistence.Models/ChangeLogValuesDto.cs new file mode 100644 index 0000000..548a7ba --- /dev/null +++ b/DD.Persistence.Models/ChangeLogValuesDto.cs @@ -0,0 +1,17 @@ +namespace DD.Persistence.Models; + +/// +/// Dto для хранения записей, содержащих начальную и конечную глубину забоя, а также секцию +/// +public class ChangeLogValuesDto +{ + /// + /// Ключ записи + /// + public Guid Id { get; set; } + + /// + /// Объект записи + /// + public required IDictionary Value { get; set; } +} diff --git a/DD.Persistence.Models/DataWithWellDepthAndSectionDto.cs b/DD.Persistence.Models/DataWithWellDepthAndSectionDto.cs deleted file mode 100644 index 7644229..0000000 --- a/DD.Persistence.Models/DataWithWellDepthAndSectionDto.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace DD.Persistence.Models; - -/// -/// Dto для хранения записей, содержащих начальную и конечную глубину забоя, а также секцию -/// -public class DataWithWellDepthAndSectionDto -{ - /// - /// Ключ записи - /// - public Guid Id { get; set; } - - /// - /// Глубина забоя на дату начала интервала - /// - public double DepthStart { get; set; } - - /// - /// Глубина забоя на дату окончания интервала - /// - public double DepthEnd { get; set; } - - /// - /// Ключ секции - /// - public Guid IdSection { get; set; } - - /// - /// Объект записи - /// - public required IDictionary Value { get; set; } -} diff --git a/DD.Persistence.Models/IWithSectionPart.cs b/DD.Persistence.Models/IWithSectionPart.cs deleted file mode 100644 index 0d3ff1f..0000000 --- a/DD.Persistence.Models/IWithSectionPart.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace DD.Persistence.ModelsAbstractions; -public interface IWithSectionPart -{ - public double DepthStart { get; set; } - - public double DepthEnd { get; set; } - - public Guid IdSection { get; set; } -} diff --git a/DD.Persistence.Models/Requests/SectionPartRequest.cs b/DD.Persistence.Models/Requests/SectionPartRequest.cs deleted file mode 100644 index 73319c6..0000000 --- a/DD.Persistence.Models/Requests/SectionPartRequest.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace DD.Persistence.Models.Requests; - -/// -/// Запрос для фильтрации данных по секции и глубине -/// -public class SectionPartRequest -{ - /// - /// Глубина забоя на дату начала интервала - /// - public double? DepthStart { get; set; } - - /// - /// Глубина забоя на дату окончания интервала - /// - public double? DepthEnd { get; set; } - - /// - /// Ключ секции - /// - public Guid? IdSection { get; set; } -} diff --git a/DD.Persistence.Repository/DependencyInjection.cs b/DD.Persistence.Repository/DependencyInjection.cs index d0a5d37..1424d37 100644 --- a/DD.Persistence.Repository/DependencyInjection.cs +++ b/DD.Persistence.Repository/DependencyInjection.cs @@ -18,11 +18,8 @@ public static class DependencyInjection .Ignore(dest => dest.System, dest => dest.SystemId); TypeAdapterConfig.NewConfig() - .Map(dest => dest.Value, src => new DataWithWellDepthAndSectionDto() + .Map(dest => dest.Value, src => new ChangeLogValuesDto() { - DepthEnd = src.DepthEnd, - DepthStart = src.DepthStart, - IdSection = src.IdSection, Value = src.Value, Id = src.Id }); diff --git a/DD.Persistence.Repository/QueryBuilders.cs b/DD.Persistence.Repository/QueryBuilders.cs index 53e72a4..52b6429 100644 --- a/DD.Persistence.Repository/QueryBuilders.cs +++ b/DD.Persistence.Repository/QueryBuilders.cs @@ -12,25 +12,6 @@ namespace DD.Persistence.Repository; /// public static class QueryBuilders { - public static IQueryable Apply(this IQueryable query, SectionPartRequest request) - where TEntity : class, IWithSectionPart - { - if (request.IdSection.HasValue) - { - query = query.Where(e => e.IdSection == request.IdSection); - } - if (request.DepthStart.HasValue) - { - query = query.Where(e => e.DepthStart >= request.DepthStart); - } - if (request.DepthEnd.HasValue) - { - query = query.Where(e => e.DepthEnd <= request.DepthEnd); - } - - return query; - } - public static IQueryable Apply(this IQueryable query, DateTimeOffset momentUtc) where TEntity : class, IChangeLog { @@ -49,17 +30,10 @@ public static class QueryBuilders PaginationRequest request, Func Convert, CancellationToken token) - where TEntity : class, IWithSectionPart + where TEntity : class where TDto : class { - if (String.IsNullOrEmpty(request.SortSettings)) - { - query = query - .OrderBy(e => e.IdSection) - .ThenBy(e => e.DepthStart) - .ThenBy(e => e.DepthEnd); - } - else + if (!String.IsNullOrEmpty(request.SortSettings)) { query = query.SortBy(request.SortSettings); } diff --git a/DD.Persistence.Repository/Repositories/ChangeLogRepository.cs b/DD.Persistence.Repository/Repositories/ChangeLogRepository.cs index 60fe08e..ebb3859 100644 --- a/DD.Persistence.Repository/Repositories/ChangeLogRepository.cs +++ b/DD.Persistence.Repository/Repositories/ChangeLogRepository.cs @@ -17,7 +17,7 @@ public class ChangeLogRepository : IChangeLogRepository this.db = db; } - public async Task AddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token) + public async Task AddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var entities = new List(); foreach (var dto in dtos) @@ -76,7 +76,7 @@ public class ChangeLogRepository : IChangeLogRepository return await db.SaveChangesAsync(token); } - public async Task ClearAndAddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token) + public async Task ClearAndAddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token) { var result = 0; @@ -91,7 +91,7 @@ public class ChangeLogRepository : IChangeLogRepository return result; } - public async Task UpdateRange(Guid idEditor, IEnumerable dtos, CancellationToken token) + public async Task UpdateRange(Guid idEditor, IEnumerable dtos, CancellationToken token) { var dbSet = db.Set(); @@ -127,16 +127,14 @@ public class ChangeLogRepository : IChangeLogRepository } - public async Task> GetByDate( + public async Task> GetByDate( Guid idDiscriminator, DateTimeOffset momentUtc, - SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token) { var query = CreateQuery(idDiscriminator); query = query.Apply(momentUtc); - query = query.Apply(filterRequest); var result = await query.ApplyPagination(paginationRequest, Convert, token); @@ -196,7 +194,7 @@ public class ChangeLogRepository : IChangeLogRepository return datesOnly; } - private static ChangeLog CreateEntityFromDto(Guid idAuthor, Guid idDiscriminator, DataWithWellDepthAndSectionDto dto) + private static ChangeLog CreateEntityFromDto(Guid idAuthor, Guid idDiscriminator, ChangeLogValuesDto dto) { var entity = new ChangeLog() { @@ -206,16 +204,13 @@ public class ChangeLogRepository : IChangeLogRepository IdDiscriminator = idDiscriminator, IdEditor = idAuthor, - Value = dto.Value, - IdSection = dto.IdSection, - DepthStart = dto.DepthStart, - DepthEnd = dto.DepthEnd, + Value = dto.Value }; return entity; } - public async Task> GetGtDate(Guid idDiscriminator, DateTimeOffset dateBegin, CancellationToken token) + public async Task> GetGtDate(Guid idDiscriminator, DateTimeOffset dateBegin, CancellationToken token) { var date = dateBegin.ToUniversalTime(); var query = this.db.Set() @@ -256,5 +251,5 @@ public class ChangeLogRepository : IChangeLogRepository }; } - private DataWithWellDepthAndSectionDto Convert(ChangeLog entity) => entity.Adapt(); + private ChangeLogValuesDto Convert(ChangeLog entity) => entity.Adapt(); } diff --git a/DD.Persistence.Test/TimestampedValuesServiceShould.cs b/DD.Persistence.Test/TimestampedValuesServiceShould.cs index 5f3e65b..0acb6de 100644 --- a/DD.Persistence.Test/TimestampedValuesServiceShould.cs +++ b/DD.Persistence.Test/TimestampedValuesServiceShould.cs @@ -18,11 +18,14 @@ public class TimestampedValuesServiceShould [Fact] public async Task TestServiceEfficiency() { - var discriminatorId = Guid.NewGuid(); + var discriminatorIds = new[] { Guid.NewGuid(), Guid.NewGuid() }; const int count = 10; var dtos = Generate(count, DateTimeOffset.UtcNow); var addRangeResult = await timestampedValuesService - .AddRange(discriminatorId, dtos, CancellationToken.None); + .AddRange(discriminatorIds.First(), dtos, CancellationToken.None); + Assert.Equal(0, addRangeResult); + addRangeResult = await timestampedValuesService + .AddRange(discriminatorIds.Last(), dtos, CancellationToken.None); Assert.Equal(0, addRangeResult); var columnNames = new[] { "A", "B", "C", "D" }; @@ -30,7 +33,7 @@ public class TimestampedValuesServiceShould .AddHours(-1) .ToUniversalTime(); var getResult = await timestampedValuesService - .Get(discriminatorId, geTimestamp, columnNames, 0, count, CancellationToken.None); + .Get(discriminatorIds, geTimestamp, columnNames, 0, count, CancellationToken.None); Assert.NotNull(getResult); Assert.Empty(getResult); } diff --git a/DD.Persistence/API/IChangeLogApi.cs b/DD.Persistence/API/IChangeLogApi.cs index e865894..5389ba2 100644 --- a/DD.Persistence/API/IChangeLogApi.cs +++ b/DD.Persistence/API/IChangeLogApi.cs @@ -7,7 +7,7 @@ namespace DD.Persistence.API; /// /// Интерфейс для работы с API журнала изменений /// -public interface IChangeLogApi : ISyncWithDiscriminatorApi +public interface IChangeLogApi : ISyncWithDiscriminatorApi { /// /// Импорт с заменой: удаление старых строк и добавление новых @@ -16,28 +16,26 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi /// /// - Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task ClearAndAddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Получение данных на текущую дату (с пагинацией) /// /// - /// параметры запроса фильтрации /// параметры запроса пагинации /// /// - Task GetCurrent(Guid idDiscriminator, SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token); + Task GetCurrent(Guid idDiscriminator, PaginationRequest paginationRequest, CancellationToken token); /// /// Получение данных на определенную дату (с пагинацией) /// /// /// - /// параметры запроса фильтрации /// параметры запроса пагинации /// /// - Task GetByDate(Guid idDiscriminator, DateTimeOffset moment, SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token); + Task GetByDate(Guid idDiscriminator, DateTimeOffset moment, PaginationRequest paginationRequest, CancellationToken token); /// /// Получение исторических данных за определенный период времени @@ -56,7 +54,7 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi /// /// - Task Add(Guid idDiscriminator, DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task Add(Guid idDiscriminator, ChangeLogValuesDto dto, CancellationToken token); /// /// Добавить несколько записей @@ -65,7 +63,7 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi /// /// - Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task AddRange(Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Обновить одну запись @@ -73,7 +71,7 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi /// /// - Task Update(DataWithWellDepthAndSectionDto dto, CancellationToken token); + Task Update(ChangeLogValuesDto dto, CancellationToken token); /// /// Обновить несколько записей @@ -81,7 +79,7 @@ public interface IChangeLogApi : ISyncWithDiscriminatorApi /// /// - Task UpdateRange(IEnumerable dtos, CancellationToken token); + Task UpdateRange(IEnumerable dtos, CancellationToken token); /// /// Удалить одну запись diff --git a/DD.Persistence/Repositories/IChangeLogRepository.cs b/DD.Persistence/Repositories/IChangeLogRepository.cs index 6c39e24..3305e65 100644 --- a/DD.Persistence/Repositories/IChangeLogRepository.cs +++ b/DD.Persistence/Repositories/IChangeLogRepository.cs @@ -8,7 +8,7 @@ namespace DD.Persistence.Repositories; /// Интерфейс для работы с историческими данными /// /// -public interface IChangeLogRepository : ISyncWithDiscriminatorRepository +public interface IChangeLogRepository : ISyncWithDiscriminatorRepository { /// /// Добавление записей @@ -18,7 +18,7 @@ public interface IChangeLogRepository : ISyncWithDiscriminatorRepository /// /// - Task AddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task AddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Пометить записи как удаленные @@ -46,7 +46,7 @@ public interface IChangeLogRepository : ISyncWithDiscriminatorRepository /// /// - Task ClearAndAddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token); + Task ClearAndAddRange(Guid idAuthor, Guid idDiscriminator, IEnumerable dtos, CancellationToken token); /// /// Редактирование записей @@ -55,18 +55,17 @@ public interface IChangeLogRepository : ISyncWithDiscriminatorRepository /// /// - Task UpdateRange(Guid idEditor, IEnumerable dtos, CancellationToken token); + Task UpdateRange(Guid idEditor, IEnumerable dtos, CancellationToken token); /// /// Получение актуальных записей на определенный момент времени (с пагинацией) /// /// /// текущий момент времени - /// параметры запроса фильтрации /// параметры запроса пагинации /// /// - Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, SectionPartRequest filterRequest, PaginationRequest paginationRequest, CancellationToken token); + Task> GetByDate(Guid idDiscriminator, DateTimeOffset moment, PaginationRequest paginationRequest, CancellationToken token); /// /// Получение измененных записей за период времени