using AsbCloudApp.Data; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace AsbCloudWebApi.Controllers { /// /// Контроллер сбора данных от буровых /// [Route("api/well")] [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] [Route("{idWell}/data")] [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public IActionResult GetData(int idWell, DateTime begin = default, int intervalSec = 600, int approxPointsCount = 1024) { if (begin == default) begin = DateTime.Now.AddSeconds(-intervalSec); var content = telemetryDataService.Get(idWell, begin, intervalSec, approxPointsCount); if (content is null || !content.Any()) return NoContent(); return Ok(content); } [HttpGet] [Route("{idWell}/dataDatesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] public IActionResult GetDataDatesRange(int idWell) { int? idCompany = User.GetCompanyId(); if (idCompany is null) return Forbid(); bool isCompanyOwnsWell = wellService.IsCompanyInvolvedInWell((int)idCompany, idWell); if (!isCompanyOwnsWell) return Forbid(); DatesRangeDto dataDatesRange = telemetryDataService.GetDataDatesRange(idWell); return Ok(dataDatesRange); } } }