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/drillParams/{idWell}")] [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")] [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] [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] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task SaveAsync(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(drillParamsDto, token); return Ok(result); } /// /// Изменяет значения выбранного режима бурения /// /// id скважины /// Параметры режимов бурений для секции /// Токен отмены задачи /// [HttpPut] [ProducesResponseType(typeof(int), (int) System.Net.HttpStatusCode.OK)] public async Task EditAsync(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.UpdateAsync(idWell, drillParamsDto, token); return Ok(result); } /// /// Удаляет объект значений выбранного режима бурения /// /// id скважины /// Id объекта параметров режима бурений для секции /// Токен отмены задачи /// [HttpDelete] [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); } } }