using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Persistence.Models; using Persistence.Models.Requests; using Persistence.Repositories; using System.Net; namespace Persistence.API.Controllers; /// /// Работа с состояниями систем автобурения (АБ) /// [ApiController] [Authorize] [Route("api/[controller]")] public class TechMessagesController : ControllerBase { private readonly ITechMessagesRepository techMessagesRepository; private static readonly Dictionary categories = new() { { 0, "System" }, { 1, "Авария" }, { 2, "Предупреждение" }, { 3, "Инфо" }, { 4, "Прочее" } }; public TechMessagesController(ITechMessagesRepository techMessagesRepository) { this.techMessagesRepository = techMessagesRepository; } /// /// Получить список технологических сообщений в виде страницы /// /// /// /// [HttpGet] public async Task>> GetPage([FromQuery] PaginationRequest request, CancellationToken token) { var result = await techMessagesRepository.GetPage(request, token); return Ok(result); } /// /// Получить статистику по системам /// /// /// /// /// [HttpGet("statistics")] public async Task>> GetStatistics([FromQuery] IEnumerable autoDrillingSystem, [FromQuery] IEnumerable categoryIds, CancellationToken token) { var result = await techMessagesRepository.GetStatistics(autoDrillingSystem, categoryIds, token); return Ok(result); } /// /// Получить список всех систем /// /// /// [HttpGet("systems")] public async Task>> GetSystems(CancellationToken token) { var result = await techMessagesRepository.GetSystems(token); return Ok(result); } /// /// Получить диапазон дат, для которых есть данные в репозитории /// /// /// [HttpGet("range")] public async Task> GetDatesRangeAsync(CancellationToken token) { var result = await techMessagesRepository.GetDatesRangeAsync(token); return Ok(result); } /// /// Получить порцию записей, начиная с заданной даты /// /// /// /// /// [HttpGet("part")] public async Task>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token) { var result = await techMessagesRepository.GetPart(dateBegin, take, token); return Ok(result); } /// /// Добавить новые технологические сообщения /// /// /// /// [HttpPost] [ProducesResponseType(typeof(int), (int)HttpStatusCode.Created)] public async Task AddRange([FromBody] IEnumerable dtos, CancellationToken token) { var userId = User.GetUserId(); var result = await techMessagesRepository.AddRange(dtos, userId, token); return CreatedAtAction(nameof(AddRange), result); } /// /// Получить словарь категорий /// /// [HttpGet("categories")] public ActionResult> GetImportantCategories() { return Ok(categories); } }