using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using AsbCloudApp.Data; using AsbCloudApp.Services; namespace AsbCloudWebApi.Controllers { /// /// Контроллер для режимов бурения /// [Route("api/well/{idWell}/drillParams/")] [ApiController] public class DrillParamsController : ControllerBase { private readonly IDrillParamsService drillParamsService; private readonly IWellService wellService; public DrillParamsController(IDrillParamsService drillParamsService, IWellService wellService) { this.drillParamsService = drillParamsService; this.wellService = wellService; } /// /// Возвращает автоматически рассчитанные значения для режимов бурения /// /// id скважины /// Стартовая глубина /// Конечная глубина /// Токен отмены задачи /// Значения по умолчанию для режимов бурения [HttpGet("autoParams")] [Permission] [ProducesResponseType(typeof(DrillParamsDto), (int) System.Net.HttpStatusCode.OK)] public async Task GetDefaultAsync(int idWell, double startDepth, double endDepth, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var drillParamsDo = await drillParamsService.GetDefaultDrillParamsAsync(idWell, startDepth, endDepth, token); return Ok(drillParamsDo); } /// /// Возвращает все значения для режимов бурения на скважине /// /// id скважины /// Токен отмены задачи /// Список параметров для режимов бурения на скважине [HttpGet] [Permission] [ProducesResponseType(typeof(IEnumerable), (int) System.Net.HttpStatusCode.OK)] public async Task GetAllAsync(int idWell, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var dto = await drillParamsService.GetAllAsync(idWell, token); return Ok(dto); } /// /// Сохраняет значения для режимов бурения по секции на скважине /// /// id скважины /// Параметры режимов бурений для секции /// Токен отмены задачи /// [HttpPost] [Permission] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task InsertAsync(int idWell, DrillParamsDto drillParamsDto, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var result = await drillParamsService.InsertAsync(idWell, drillParamsDto, token); return Ok(result); } /// /// Добавляет массив объектов режимов бурений /// /// id скважины /// Массив объектов параметров режима бурений для секции /// Токен отмены задачи /// [HttpPost("range")] [Permission] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task InsertRangeAsync(int idWell, IEnumerable drillParams, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var result = await drillParamsService.InsertRangeAsync(idWell, drillParams, token); return Ok(result); } /// /// Удаляет старые режимы бурения по скважине и добавляет новые /// /// Id скважины для добавления /// Новые режимы бурения /// /// кол-во затронутых изменениями записей [HttpPost("save")] [Permission] [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] public async Task SaveAsync(int idWell, IEnumerable drillParams, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var result = await drillParamsService.SaveAsync(idWell, drillParams, token); return Ok(result); } /// /// Изменяет значения выбранного режима бурения /// /// id скважины /// id dto для изменения /// Параметры режимов бурений для секции /// Токен отмены задачи /// [HttpPut] [Permission] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task UpdateAsync(int idWell, int dtoId, DrillParamsDto drillParamsDto, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var result = await drillParamsService.UpdateAsync(idWell, dtoId, drillParamsDto, token); return Ok(result); } /// /// Удаляет объект значений выбранного режима бурения /// /// id скважины /// Id объекта параметров режима бурений для секции /// Токен отмены задачи /// [HttpDelete] [Permission] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task DeleteAsync(int idWell, int drillParamsId, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var result = await drillParamsService.DeleteAsync(drillParamsId, token); return Ok(result); } /// /// Возвращает значения для режимов бурения на композитной скважине /// /// id скважины /// Токен отмены задачи /// Список параметров для режимов бурения на композитной скважине [HttpGet("composite")] [Permission] [ProducesResponseType(typeof(IEnumerable), (int) System.Net.HttpStatusCode.OK)] public async Task GetCompositeAllAsync(int idWell, CancellationToken token = default) { var idCompany = User.GetCompanyId(); if (idCompany is null || !await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, token).ConfigureAwait(false)) return Forbid(); var dto = await drillParamsService.GetCompositeAllAsync(idWell, token); return Ok(dto); } } }