From c129825eaa55f5d8f131726a1eddc502f9c96d73 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 31 May 2024 11:53:58 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/IChangeLogRepository.cs | 17 ++++---- .../Repository/ChangeLogRepositoryAbstract.cs | 43 +++++++++++++------ .../ProcessMapPlanBaseRepository.cs | 8 +--- .../Export/ProcessMapPlanExportService.cs | 2 +- .../Services/WellInfoService.cs | 2 +- ...ProcessMapReportDataSaubStatServiceTest.cs | 37 +++++++--------- .../ProcessMapPlanBaseController.cs | 2 +- 7 files changed, 58 insertions(+), 53 deletions(-) diff --git a/AsbCloudApp/Repositories/IChangeLogRepository.cs b/AsbCloudApp/Repositories/IChangeLogRepository.cs index c17b2723..bf7cc6ef 100644 --- a/AsbCloudApp/Repositories/IChangeLogRepository.cs +++ b/AsbCloudApp/Repositories/IChangeLogRepository.cs @@ -12,12 +12,11 @@ namespace AsbCloudApp.Repositories; /// public interface IChangeLogRepository where TDto : AsbCloudApp.Data.IId - where TRequest : ChangeLogBaseRequest { /// /// Добавление записей /// - /// + /// пользователь, который добавляет /// /// /// @@ -26,7 +25,7 @@ public interface IChangeLogRepository /// /// Редактирование записей /// - /// + /// пользователь, который редактирует /// /// /// @@ -35,17 +34,17 @@ public interface IChangeLogRepository /// /// Добавляет Dto у которых id == 0, изменяет dto у которых id != 0 /// - /// + /// пользователь, который редактирует или добавляет /// /// /// Task UpdateOrInsertRange(int idUser, IEnumerable dtos, CancellationToken token); /// - /// Добавление записей с удалением старых (для импорта) + /// Помечает записи как удаленные /// - /// - /// + /// пользователь, который чистит + /// Фильтр по свойствам конкретной сущности /// /// Task Clear(int idUser, TRequest request, CancellationToken token); @@ -87,10 +86,10 @@ public interface IChangeLogRepository Task>> GetChangeLog(TRequest request, DateOnly? date, CancellationToken token); /// - /// Получение записей по параметрам + /// Получение текущих сейчас записей по параметрам /// /// /// /// - Task> Get(TRequest request, CancellationToken token); + Task> GetCurrent(TRequest request, CancellationToken token); } diff --git a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs index 8b260c69..b768136a 100644 --- a/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs +++ b/AsbCloudInfrastructure/Repository/ChangeLogRepositoryAbstract.cs @@ -1,5 +1,4 @@ using AsbCloudApp.Data; -using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Exceptions; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; @@ -235,28 +234,46 @@ public abstract class ChangeLogRepositoryAbstract : ICh query = createdQuery.Union(editedQuery); } + var dtos = await CreateChangeLogDto(query, offset, token); + + return dtos; + } + + private async Task>> CreateChangeLogDto(IQueryable query, TimeSpan offset, CancellationToken token) + { var entities = await query .OrderBy(e => e.Creation) .ThenBy(e => e.Obsolete) .ThenBy(e => e.Id) .ToListAsync(token); + var dtos = entities.Select(e => ConvertChangeLogDto(e, offset)); + return dtos; + } + + public async Task>> Get(TRequest request, DateTimeOffset? moment, CancellationToken token) + { + var query = BuildQuery(request); + if (moment.HasValue) + { + var momentUtc = moment.Value.ToUniversalTime(); + query = query + .Where(e => e.Creation <= momentUtc) + .Where(e => e.Obsolete == null || e.Obsolete >= momentUtc); + } + + TimeSpan offset = GetTimezoneOffset(request); + var dtos = await CreateChangeLogDto(query, offset, token); return dtos; } - public async Task> Get(TRequest request, CancellationToken token) + public async Task> GetCurrent(TRequest request, CancellationToken token) { - var query = BuildQuery(request); - var entities = await query - .Where(e => e.Obsolete == null) - .OrderBy(e => e.Creation) - .ThenBy(e => e.Id) - .ToArrayAsync(token); - - TimeSpan offset = GetTimezoneOffset(request); - var dtos = entities.Select(e => Convert(e, offset)); - return dtos; + var moment = new DateTimeOffset(3000, 1, 1, 0, 0, 0, TimeSpan.Zero); + var entities = await Get(request, moment, token); + var result = entities.Select(e => e.Item); + return result; } protected abstract TimeSpan GetTimezoneOffset(TRequest request); @@ -268,7 +285,7 @@ public abstract class ChangeLogRepositoryAbstract : ICh var entity = dto.Adapt(); entity.Creation = entity.Creation.ToUniversalTime(); - if(entity.Obsolete.HasValue) + if (entity.Obsolete.HasValue) entity.Obsolete = entity.Obsolete.Value.ToUniversalTime(); return entity; diff --git a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs index 5fa6a3b6..7f84a052 100644 --- a/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs +++ b/AsbCloudInfrastructure/Repository/ProcessMapPlanBaseRepository.cs @@ -37,13 +37,7 @@ public class ProcessMapPlanBaseRepository : ChangeLogRepositoryAb query = query.Where(e => e.Creation >= from || e.Obsolete >= from); } - if (request.Moment.HasValue) - { - var moment = request.Moment.Value.ToUniversalTime(); - query = query - .Where(e => e.Creation <= moment) - .Where(e => e.Obsolete == null || e.Obsolete >= moment); - } + return query; } diff --git a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs index f512c2f1..8f8596ab 100644 --- a/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMapPlan/Export/ProcessMapPlanExportService.cs @@ -33,7 +33,7 @@ public abstract class ProcessMapPlanExportService : ExportExcelService(); foreach (var processMapPlanWellDrillingRequest in processMapPlanWellDrillingRequests) { - var processMaps = await processMapPlanWellDrillingRepository.Get(processMapPlanWellDrillingRequest, token); + var processMaps = await processMapPlanWellDrillingRepository.GetCurrent(processMapPlanWellDrillingRequest, token); processMapPlanWellDrillings.AddRange(processMaps); } diff --git a/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs b/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs index a5cba844..33f837bd 100644 --- a/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs +++ b/AsbCloudWebApi.Tests/Services/ProcessMaps/ProcessMapReportDataSaubStatServiceTest.cs @@ -1,21 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data; +using AsbCloudApp.Data; using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudDb.Model; -using AsbCloudInfrastructure.Repository; -using AsbCloudInfrastructure.Services.ProcessMaps; using AsbCloudInfrastructure.Services.ProcessMaps.Report; -using DocumentFormat.OpenXml.Bibliography; -using DocumentFormat.OpenXml.Spreadsheet; using NSubstitute; +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; using Xunit; namespace AsbCloudWebApi.Tests.Services.ProcessMaps; @@ -24,27 +19,27 @@ public class ProcessMapReportDataSaubStatServiceTest { - private IWellService wellService + private IWellService wellService = Substitute.For(); - private IChangeLogRepository processMapPlanBaseRepository + private IChangeLogRepository processMapPlanBaseRepository = Substitute.For>(); - private IWellOperationRepository wellOperationRepository + private IWellOperationRepository wellOperationRepository = Substitute.For(); - private IWellOperationCategoryRepository wellOperationCategoryRepository + private IWellOperationCategoryRepository wellOperationCategoryRepository = Substitute.For(); - private IDataSaubStatRepository dataSaubStatRepository + private IDataSaubStatRepository dataSaubStatRepository = Substitute.For(); private ProcessMapReportDrillingService service; private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 }; - private static readonly DateTimeOffset dateStart = new (2024, 01, 01, 00, 11, 11, timezone.Offset); - private readonly static WellDto well = new() - { + private static readonly DateTimeOffset dateStart = new(2024, 01, 01, 00, 11, 11, timezone.Offset); + private readonly static WellDto well = new() + { Id = 1, IdTelemetry = 1, Timezone = timezone @@ -52,7 +47,7 @@ public class ProcessMapReportDataSaubStatServiceTest private readonly static IEnumerable processMapPlan = new List() { new() { - DepthStart = 0, + DepthStart = 0, DepthEnd = 100, IdMode = 1, IdWell = well.Id, @@ -253,13 +248,13 @@ public class ProcessMapReportDataSaubStatServiceTest HasOscillation = false, } }; - + public ProcessMapReportDataSaubStatServiceTest() { wellService.GetOrDefaultAsync(Arg.Any(), Arg.Any()) .Returns(well); - processMapPlanBaseRepository.Get(Arg.Any(), Arg.Any()) + processMapPlanBaseRepository.GetCurrent(Arg.Any(), Arg.Any()) .Returns(processMapPlan); wellOperationRepository.GetAsync(Arg.Any(), Arg.Any()) diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs index 4afd97f3..f701dd89 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/ProcessMapPlanBaseController.cs @@ -144,7 +144,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase await AssertUserHasAccessToWell(idWell, token); var serviceRequest = new ProcessMapPlanBaseRequestWithWell(idWell); - var result = await repository.Get(serviceRequest, token); + var result = await repository.GetCurrent(serviceRequest, token); return Ok(result); }