using AsbCloudApp.Data; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; 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("{wellId}/data")] [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public IActionResult GetData(int wellId, DateTime begin = default, int intervalSec = 600, int approxPointsCount = 1024) { if (begin == default) begin = DateTime.Now.AddSeconds(-intervalSec); var content = telemetryDataService.Get(wellId, begin, intervalSec, approxPointsCount); return Ok(content); } [HttpGet] [Route("{wellId}/dataDatesRange")] [ProducesResponseType(typeof(DatesRangeDto), (int)System.Net.HttpStatusCode.OK)] public IActionResult GetDataDatesRange(int wellId) { int? idCustomer = User.GetCustomerId(); if (idCustomer is null) return BadRequest(); bool isCustomerOwnsWell = wellService.CheckWellOwnership((int)idCustomer, wellId); if (!isCustomerOwnsWell) return Forbid(); DatesRangeDto dataDatesRange = telemetryDataService.GetDataDatesRange(wellId); return Ok(dataDatesRange); } } }