using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using DD.Persistence.Models; using DD.Persistence.Services.Interfaces; using System.Net; namespace DD.Persistence.API.Controllers; /// <summary> /// Работа с параметрами Wits /// </summary> [ApiController] [Authorize] [Route("api/[controller]")] public class WitsDataController : ControllerBase, IWitsDataApi { private readonly IWitsDataService witsDataService; public WitsDataController(IWitsDataService witsDataService) { this.witsDataService = witsDataService; } /// <summary> /// Получить диапазон дат, для которых есть данные в репозитории /// </summary> /// <param name="discriminatorId"></param> /// <param name="token"></param> /// <returns></returns> [HttpGet("{discriminatorId}/datesRange")] public async Task<ActionResult<DatesRangeDto>> GetDatesRangeAsync([FromRoute] Guid discriminatorId, CancellationToken token) { var result = await witsDataService.GetDatesRangeAsync(discriminatorId, token); return result == null ? NoContent() : Ok(result); } /// <summary> /// Получить порцию записей, начиная с заданной даты /// </summary> /// <param name="discriminatorId"></param> /// <param name="dateBegin"></param> /// <param name="take"></param> /// <param name="token"></param> /// <returns></returns> [HttpGet("{discriminatorId}/part")] public async Task<ActionResult<IEnumerable<WitsDataDto>>> GetPart([FromRoute] Guid discriminatorId, [FromQuery] DateTimeOffset dateBegin, [FromQuery] int take, CancellationToken token) { var result = await witsDataService.GetPart(discriminatorId, dateBegin, take, token); return Ok(result); } /// <summary> /// Получить набор параметров (Wits) для построения графика /// </summary> /// <param name="discriminatorId">Дискриминатор системы</param> /// <param name="dateFrom">Начало временного интервала</param> /// <param name="dateTo">Конец временного интервала</param> /// <param name="approxPointsCount">Количество точек</param> /// <param name="token"></param> /// <returns></returns> [HttpGet("{discriminatorId}/graph")] public async Task<ActionResult<IEnumerable<WitsDataDto>>> GetValuesForGraph([FromRoute] Guid discriminatorId, [FromQuery] DateTimeOffset dateFrom, [FromQuery] DateTimeOffset dateTo, [FromQuery] int approxPointsCount, CancellationToken token) { var result = await witsDataService.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointsCount, token); return Ok(result); } /// <summary> /// Сохранить набор параметров (Wits) /// </summary> /// <param name="dtos"></param> /// <param name="token"></param> /// <returns></returns> [HttpPost] [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)] public async Task<IActionResult> AddRange([FromBody] IEnumerable<WitsDataDto> dtos, CancellationToken token) { var result = await witsDataService.AddRange(dtos, token); return CreatedAtAction(nameof(AddRange), result); } }