diff --git a/AsbCloudApp/Services/IWitsRepository.cs b/AsbCloudApp/Services/IWitsRepository.cs index 344c7eb5..dfda1320 100644 --- a/AsbCloudApp/Services/IWitsRepository.cs +++ b/AsbCloudApp/Services/IWitsRepository.cs @@ -11,6 +11,7 @@ namespace AsbCloudApp.Services { Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token); Task> GetAsync(int idTelemetry, DateTime begin, DateTime end, CancellationToken token); + Task> GetLastAsync(int idTelemetry, CancellationToken token); Task<(DateTime begin, DateTime end, int count)?> GetStatAsync(int idTelemetry, CancellationToken token); } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/WitsRecordRepository.cs b/AsbCloudInfrastructure/Services/WitsRecordRepository.cs index 53a13277..88ec6ebf 100644 --- a/AsbCloudInfrastructure/Services/WitsRecordRepository.cs +++ b/AsbCloudInfrastructure/Services/WitsRecordRepository.cs @@ -54,6 +54,17 @@ namespace AsbCloudInfrastructure.Services return data.Select(d => Convert(d, timezoneHours)); } + public async Task> GetLastAsync(int idTelemetry, CancellationToken token) + { + var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours; + var query = dbset + .Where(d => d.IdTelemetry == idTelemetry) + .OrderBy(d => d.DateTime) + .AsNoTracking(); + var data = await query.LastOrDefaultAsync(token); + return new TDto[] { Convert(data, timezoneHours) }; + } + public Task SaveDataAsync(int idTelemetry, IEnumerable dtos, CancellationToken token) { if (dtos?.Any() != true) @@ -86,5 +97,6 @@ namespace AsbCloudInfrastructure.Services data.DateTime = entity.DateTime.ToRemoteDateTime(timezoneHours); return data; } + } } diff --git a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs index 4badf829..cf0ce7e3 100644 --- a/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs +++ b/AsbCloudWebApi/Controllers/WITS/WitsControllerAbstract.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -59,6 +60,26 @@ namespace AsbCloudWebApi.Controllers.WITS return Ok(); } + /// + /// Получение последней пришедшей WITS записи. + /// + /// id скважины + /// + /// + /// + [HttpGet("{idWell}/last")] + public async virtual Task>> GetLastDataAsync( + int idWell, + [FromServices] IWitsRecordRepository witsRecordRepository, + CancellationToken token) + { + var idTelemetry = telemetryService.GetIdTelemetryByIdWell(idWell); + if (idTelemetry is null) + return NoContent(); + var dtos = await witsRecordRepository.GetLastAsync((int)idTelemetry, token); + return Ok(dtos); + } + /// /// Получение списка архивных WITS записей за период. /// @@ -71,8 +92,8 @@ namespace AsbCloudWebApi.Controllers.WITS [HttpGet("{idWell}")] public async virtual Task>> GetDataAsync( int idWell, - DateTime begin, - DateTime end, + [Required] DateTime begin, + [Required] DateTime end, [FromServices] IWitsRecordRepository witsRecordRepository, CancellationToken token) {