изменена модель возвращаемая методом

изменен алгоритм внутри метоа
This commit is contained in:
eugeniy_ivanov 2022-10-25 09:42:08 +05:00
parent cc75bcf4f9
commit 17c7392542
4 changed files with 21 additions and 25 deletions

View File

@ -14,7 +14,7 @@ namespace AsbCloudApp.Requests
public class SubsystemOperationTimeRequest: RequestBase
{
/// <summary>
/// идентификатор скважины, может не указыватся пользователем
/// идентификатор скважины
/// </summary>
[Required]
public int IdWell { get; set; }

View File

@ -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
/// <param name="request"></param>
/// <param name="token"></param>
/// <returns></returns>
Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
Task<DatesRangeDto?> GetDateRangeOperationTimeAsync(SubsystemOperationTimeRequest request, CancellationToken token);
}
#nullable disable
}

View File

@ -186,28 +186,22 @@ namespace AsbCloudInfrastructure.Services.Subsystems
}
/// <inheritdoc/>
public async Task<IEnumerable<(DateTimeOffset, DateTimeOffset)>?> 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<DatesRangeDto?> 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<SubsystemOperationTime>? BuildQuery(SubsystemOperationTimeRequest request)

View File

@ -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
/// получить доступный диапазон дат наработки подсистемы.
/// </summary>
[HttpGet("rangeDate")]
[ProducesResponseType(typeof(IEnumerable<(DateTimeOffset,DateTimeOffset)>), (int)System.Net.HttpStatusCode.OK)]
[ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> 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);
}