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);
}