diff --git a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs index 3a4c3e56..567e11cf 100644 --- a/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs +++ b/AsbCloudApp/Requests/SubsystemOperationTimeRequest.cs @@ -14,7 +14,7 @@ namespace AsbCloudApp.Requests public class SubsystemOperationTimeRequest: RequestBase { /// - /// идентификатор скважины, может не указыватся пользователем + /// идентификатор скважины /// [Required] public int IdWell { get; set; } diff --git a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs index e8332f36..62ade194 100644 --- a/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs +++ b/AsbCloudApp/Services/Subsystems/ISubsystemOperationTimeService.cs @@ -1,4 +1,5 @@ -using AsbCloudApp.Data.Subsystems; +using AsbCloudApp.Data; +using AsbCloudApp.Data.Subsystems; using AsbCloudApp.Requests; using System; using System.Collections.Generic; @@ -45,7 +46,7 @@ namespace AsbCloudApp.Services.Subsystems /// /// /// - Task?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); + Task GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token); } #nullable disable } diff --git a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs index 09027db2..ae055acf 100644 --- a/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs +++ b/AsbCloudInfrastructure/Services/Subsystems/SubsystemOperationTimeService.cs @@ -186,28 +186,22 @@ namespace AsbCloudInfrastructure.Services.Subsystems } /// - public async Task?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) - { - if (request.IdsSubsystems is null) - return null; - List<(DateTimeOffset dateFirst, DateTimeOffset dateLast)> result = new(); - var dateRanges = await db.SubsystemOperationTimes - .Where(o => request.IdsSubsystems.Contains(o.IdSubsystem)) - .GroupBy(o => o.IdSubsystem) - .Select(g => new - { - DateFirst = g.Min(o => o.DateStart), - DateLast = g.Max(o => o.DateEnd) - }) - .ToListAsync(token); - if (dateRanges.Any() != true) - return null; - foreach (var dateRange in dateRanges) + public async Task GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token) + { + var query = BuildQuery(request); + if (query is not null) { - var resultItem = (dateRange.DateFirst, dateRange.DateLast); - result.Add(resultItem); + var result = await query + .GroupBy(o => o.IdSubsystem) + .Select(g => new DatesRangeDto + { + From = g.Min(o => o.DateStart).DateTime, + To = g.Max(o => o.DateEnd).DateTime + }) + .FirstOrDefaultAsync(token); + return result; } - return result; + return null; } private IQueryable? BuildQuery(SubsystemOperationTimeRequest request) diff --git a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs index 6dce80c6..7ac1c560 100644 --- a/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs +++ b/AsbCloudWebApi/Controllers/Subsystems/SubsystemOperationTimeController.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using AsbCloudInfrastructure; using System; +using AsbCloudApp.Data; namespace AsbCloudWebApi.Controllers.Subsystems { @@ -63,11 +64,11 @@ namespace AsbCloudWebApi.Controllers.Subsystems /// получить доступный диапазон дат наработки подсистемы. /// [HttpGet("rangeDate")] - [ProducesResponseType(typeof(IEnumerable<(DateTimeOffset,DateTimeOffset)>), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] public async Task GetDateRangeOperationTimeAsync([FromQuery] SubsystemOperationTimeRequest request, CancellationToken token = default) { if (!await UserHasAccesToWellAsync(request.IdWell, token)) - return Forbid(); + return Forbid(); var result = await subsystemOperationTimeService.GetDateRangeOperationTimeAsync(request, token); return Ok(result); }