using AsbCloudApp.Data; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { /// /// Контроллер сбора данных от буровых /// [Route("api/well/{idWell}/data")] [ApiController] [Authorize] public class DataController : ControllerBase { private readonly IDataService telemetryDataService; private readonly IWellService wellService; public DataController(IDataService telemetryDataService, IWellService wellService) { this.telemetryDataService = telemetryDataService; this.wellService = wellService; } /// /// Возвращает данные САУБ по скважине. /// По умолчанию за последние 10 минут. /// /// id скважины /// дата начала выборки. По умолчанию: текущее время - intervalSec /// интервал времени даты начала выборки, секунды /// желаемое количество точек. Если в выборке точек будет больше, то выборка будет прорежена. /// Токен завершения задачи /// [HttpGet] [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public async Task GetDataAsync(int idWell, DateTime begin = default, int intervalSec = 600, int approxPointsCount = 1024, CancellationToken token = default) { if (begin == default) begin = DateTime.Now.AddSeconds(-intervalSec); var content = await telemetryDataService.GetAsync(idWell, begin, intervalSec, approxPointsCount, token).ConfigureAwait(false); if (content is null || !content.Any()) return NoContent(); return Ok(content); } /// /// Возвращает диапазон дат сохраненных данных. /// /// id скважины /// Токен завершения задачи /// [HttpGet] [Route("datesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] public async Task GetDataDatesRangeAsync(int idWell, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); if (idCompany is null) return Forbid(); bool isCompanyOwnsWell = await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false); if (!isCompanyOwnsWell) return Forbid(); DatesRangeDto dataDatesRange = await telemetryDataService.GetDataDatesRangeAsync(idWell, token).ConfigureAwait(false); return Ok(dataDatesRange); } } }