From f6ab09f77f7fa016c81f06b02fd80ed0e873a433 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Tue, 20 Feb 2024 16:46:45 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B0=20Pr?= =?UTF-8?q?ocessMapPlanWellDrillingDto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/ProcessMaps/ProcessMapPlanBaseDto.cs | 61 ---- .../ProcessMapPlanWellDrillingDto.cs | 67 ---- .../ProcessMaps/ProcessMapPlanWellReamDto.cs | 3 +- .../ProcessMaps/IProcessMapPlanService.cs | 3 +- AsbCloudInfrastructure/DependencyInjection.cs | 42 --- .../ProcessMaps/ProcessMapPlanService.cs | 3 +- .../ProcessMaps/WellSectionPlanController.cs | 289 +++++++++--------- .../Controllers/WellCompositeController.cs | 6 +- 8 files changed, 154 insertions(+), 320 deletions(-) delete mode 100644 AsbCloudApp/Data/ProcessMaps/ProcessMapPlanBaseDto.cs delete mode 100644 AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellDrillingDto.cs diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanBaseDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanBaseDto.cs deleted file mode 100644 index 6bc073ea..00000000 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanBaseDto.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; - -namespace AsbCloudApp.Data.ProcessMaps; - -/// -public abstract class ProcessMapPlanBaseDto : IId, IWellRelated -{ - /// - [Required] - public int Id { get; set; } - - /// - /// Id скважины - /// - [Required] - [Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")] - public int IdWell { get; set; } - - /// - /// Id пользователя - /// - public int IdUser { get; set; } - - /// - /// Тип секции - /// - [Required] - [Range(1, int.MaxValue, ErrorMessage = "Id секции скважины не может быть меньше 1")] - public int IdWellSectionType { get; set; } - - /// - /// Дата последнего изменения - /// - public DateTimeOffset LastUpdate { get; set; } - - /// - /// Глубина по стволу от, м - /// - /// на начало интервала - /// - /// - [Required] - [Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")] - public double DepthStart { get; set; } - - /// - /// Глубина по стволу до, м - /// - /// на конец интервала - /// - /// - [Required] - [Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")] - public double DepthEnd { get; set; } - - /// - /// Комментарий - /// - public string? Comment { get; set; } -} \ No newline at end of file diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellDrillingDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellDrillingDto.cs deleted file mode 100644 index 4e6a22b2..00000000 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellDrillingDto.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace AsbCloudApp.Data.ProcessMaps; - -/// -/// РТК план бурение скважины -/// -public class ProcessMapPlanWellDrillingDto : ProcessMapPlanBaseDto -{ - /// - /// Id режима 0-ручной, 1-ротор, 2 - слайд - /// - [Required] - [Range(0, 2, ErrorMessage = "Id режима должен быть либо 0-ручной либо, 1-ротор либо 2-слайд")] - public int IdMode { get; set; } - - /// - /// Нагрузка - /// - [Required] - public PlanLimitDto AxialLoad { get; set; } = null!; - - /// - /// Перепад давления - /// - [Required] - public PlanLimitDto Pressure { get; set; } = null!; - - /// - /// Момент на ВСП - /// - [Required] - public PlanLimitDto TopDriveTorque { get; set; } = null!; - - /// - /// Обороты на ВСП - /// - [Required] - public PlanLimitDto TopDriveSpeed { get; set; } = null!; - - /// - /// Расход - /// - [Required] - public PlanLimitDto Flow { get; set; } = null!; - - /// - /// Плановая механическая скорость, м/ч - /// - [Required] - [Range(0, 99999.9, ErrorMessage = "Плановая механическая скорость должно быть в пределах от 0 до 99999.9")] - public double RopPlan { get; set; } - - /// - /// Плановый процент использования АКБ - /// - [Required] - [Range(0, 100, ErrorMessage = "Процент использования АКБ должен быть в пределах от 0 до 100")] - public double UsageSaub { get; set; } - - /// - /// Плановый процент использования spin master - /// - [Required] - [Range(0, 100, ErrorMessage = "Процент использования spin master должен быть в пределах от 0 до 100")] - public double UsageSpin { get; set; } -} \ No newline at end of file diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellReamDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellReamDto.cs index ed3c57da..2fd39911 100644 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellReamDto.cs +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanWellReamDto.cs @@ -1,3 +1,4 @@ +using AsbCloudApp.Data.ProcessMapPlan; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -6,7 +7,7 @@ namespace AsbCloudApp.Data.ProcessMaps; /// /// РТК план проработка скважины /// -public class ProcessMapPlanWellReamDto : AsbCloudApp.Data.ProcessMapPlan.ProcessMapPlanBaseDto, IValidatableObject +public class ProcessMapPlanWellReamDto : ProcessMapPlanBaseDto, IValidatableObject { /// /// Количество повторений diff --git a/AsbCloudApp/Services/ProcessMaps/IProcessMapPlanService.cs b/AsbCloudApp/Services/ProcessMaps/IProcessMapPlanService.cs index 7068ed47..775450c8 100644 --- a/AsbCloudApp/Services/ProcessMaps/IProcessMapPlanService.cs +++ b/AsbCloudApp/Services/ProcessMaps/IProcessMapPlanService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMapPlan; namespace AsbCloudApp.Services.ProcessMaps; @@ -9,7 +10,7 @@ namespace AsbCloudApp.Services.ProcessMaps; /// РТК /// public interface IProcessMapPlanService - where T : AsbCloudApp.Data.ProcessMapPlan.ProcessMapPlanBaseDto + where T : ProcessMapPlanBaseDto { /// /// Получение РТК план по скважине diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 72e1bde2..8d7219e2 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -101,48 +101,6 @@ namespace AsbCloudInfrastructure .Ignore(dst => dst.NotificationCategory, dst => dst.User); - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Map(dest => dest.AxialLoad, src => new PlanLimitDto - { - LimitMax = src.AxialLoadLimitMax, - Plan = src.AxialLoadPlan - }) - .Map(dest => dest.Flow, src => new PlanLimitDto - { - LimitMax = src.FlowLimitMax, - Plan = src.FlowPlan - }) - .Map(dest => dest.Pressure, src => new PlanLimitDto - { - LimitMax = src.PressureLimitMax, - Plan = src.PressurePlan - }) - .Map(dest => dest.TopDriveSpeed, src => new PlanLimitDto - { - LimitMax = src.TopDriveSpeedLimitMax, - Plan = src.TopDriveSpeedPlan - }) - .Map(dest => dest.TopDriveTorque, src => new PlanLimitDto - { - LimitMax = src.TopDriveTorqueLimitMax, - Plan = src.TopDriveTorquePlan - }); - - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Map(dest => dest.AxialLoadPlan, src => src.AxialLoad.Plan) - .Map(dest => dest.AxialLoadLimitMax, src => src.AxialLoad.LimitMax) - .Map(dest => dest.FlowPlan, src => src.Flow.Plan) - .Map(dest => dest.FlowLimitMax, src => src.Flow.LimitMax) - .Map(dest => dest.PressurePlan, src => src.Pressure.Plan) - .Map(dest => dest.PressureLimitMax, src => src.Pressure.LimitMax) - .Map(dest => dest.TopDriveSpeedPlan, src => src.TopDriveSpeed.Plan) - .Map(dest => dest.TopDriveSpeedLimitMax, src => src.TopDriveSpeed.LimitMax) - .Map(dest => dest.TopDriveTorquePlan, src => src.TopDriveTorque.Plan) - .Map(dest => dest.TopDriveTorqueLimitMax, src => src.TopDriveTorque.LimitMax); - - TypeAdapterConfig.GlobalSettings.Default.Config .ForType() .Map(dest => dest.DurationHours, src => new PlanFactDto() diff --git a/AsbCloudInfrastructure/Services/ProcessMaps/ProcessMapPlanService.cs b/AsbCloudInfrastructure/Services/ProcessMaps/ProcessMapPlanService.cs index 27e0170e..08d73b4f 100644 --- a/AsbCloudInfrastructure/Services/ProcessMaps/ProcessMapPlanService.cs +++ b/AsbCloudInfrastructure/Services/ProcessMaps/ProcessMapPlanService.cs @@ -1,4 +1,5 @@ using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMapPlan; using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; @@ -12,7 +13,7 @@ using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services.ProcessMaps; public class ProcessMapPlanService : AsbCloudApp.Services.ProcessMaps.IProcessMapPlanService - where T : AsbCloudApp.Data.ProcessMapPlan.ProcessMapPlanBaseDto + where T : ProcessMapPlanBaseDto { private readonly ICrudRepository wellSectionTypeRepository; private readonly IChangeLogRepository processMapPlanBaseRepository; diff --git a/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs b/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs index 454aea70..8d0011d4 100644 --- a/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMaps/WellSectionPlanController.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMapPlan; using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Exceptions; using AsbCloudApp.Repositories; @@ -11,6 +7,11 @@ using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers.ProcessMaps; @@ -22,167 +23,167 @@ namespace AsbCloudWebApi.Controllers.ProcessMaps; [Authorize] public class WellSectionPlanController : ControllerBase { - private readonly IWellService wellService; - private readonly IWellSectionPlanRepository wellSectionPlanRepository; - private readonly ICrudRepository wellSectionRepository; + private readonly IWellService wellService; + private readonly IWellSectionPlanRepository wellSectionPlanRepository; + private readonly ICrudRepository wellSectionRepository; - public WellSectionPlanController(IWellService wellService, - IWellSectionPlanRepository wellSectionPlanRepository, - ICrudRepository wellSectionRepository) - { - this.wellService = wellService; - this.wellSectionPlanRepository = wellSectionPlanRepository; - this.wellSectionRepository = wellSectionRepository; - } + public WellSectionPlanController(IWellService wellService, + IWellSectionPlanRepository wellSectionPlanRepository, + ICrudRepository wellSectionRepository) + { + this.wellService = wellService; + this.wellSectionPlanRepository = wellSectionPlanRepository; + this.wellSectionRepository = wellSectionRepository; + } - //TODO: так же следует вынести в базовый контроллер - private int IdUser - { - get - { - var idUser = User.GetUserId(); + //TODO: так же следует вынести в базовый контроллер + private int IdUser + { + get + { + var idUser = User.GetUserId(); - if (!idUser.HasValue) - throw new ForbidException("Неизвестный пользователь"); + if (!idUser.HasValue) + throw new ForbidException("Неизвестный пользователь"); - return idUser.Value; - } - } + return idUser.Value; + } + } - /// - /// Добавить секцию - /// - /// Идентификатор скважины - /// Секция скважины - план - /// - /// - [HttpPost] - [Permission] - [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] - [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task InsertAsync(int idWell, WellSectionPlanDto wellSection, CancellationToken cancellationToken) - { - wellSection.IdWell = idWell; - wellSection.IdUser = IdUser; - - await CheckIsExistsWellSectionTypeAsync(wellSection.IdSectionType, cancellationToken); - - await AssertUserAccessToWell(idWell, cancellationToken); + /// + /// Добавить секцию + /// + /// Идентификатор скважины + /// Секция скважины - план + /// + /// + [HttpPost] + [Permission] + [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + public async Task InsertAsync(int idWell, WellSectionPlanDto wellSection, CancellationToken cancellationToken) + { + wellSection.IdWell = idWell; + wellSection.IdUser = IdUser; - var wellSectionId = await wellSectionPlanRepository.InsertAsync(wellSection, cancellationToken); + await CheckIsExistsWellSectionTypeAsync(wellSection.IdSectionType, cancellationToken); - return Ok(wellSectionId); - } - - /// - /// Обновить секцию - /// - /// Идентификатор скважины - /// Секция скважины - план - /// - /// - [HttpPut] - [Permission] - [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] - [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task UpdateAsync(int idWell, WellSectionPlanDto wellSection, CancellationToken cancellationToken) - { - wellSection.IdWell = idWell; - wellSection.IdUser = IdUser; - wellSection.LastUpdateDate = DateTimeOffset.UtcNow; + await AssertUserAccessToWell(idWell, cancellationToken); - await CheckIsExistsWellSectionTypeAsync(wellSection.IdSectionType, cancellationToken); - - await AssertUserAccessToWell(idWell, cancellationToken); + var wellSectionId = await wellSectionPlanRepository.InsertAsync(wellSection, cancellationToken); - var wellSectionId = await wellSectionPlanRepository.UpdateAsync(wellSection, cancellationToken); + return Ok(wellSectionId); + } - if (wellSectionId == ICrudRepository.ErrorIdNotFound) - return this.ValidationBadRequest(nameof(wellSection.Id), $"Секции скважины с Id: {wellSection.Id} не существует"); + /// + /// Обновить секцию + /// + /// Идентификатор скважины + /// Секция скважины - план + /// + /// + [HttpPut] + [Permission] + [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + public async Task UpdateAsync(int idWell, WellSectionPlanDto wellSection, CancellationToken cancellationToken) + { + wellSection.IdWell = idWell; + wellSection.IdUser = IdUser; + wellSection.LastUpdateDate = DateTimeOffset.UtcNow; - return Ok(wellSectionId); - } + await CheckIsExistsWellSectionTypeAsync(wellSection.IdSectionType, cancellationToken); - /// - /// Получить типы секций - /// - /// Идентификатор скважины - /// - /// - [HttpGet("wellSectionTypes")] - [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] - [ProducesResponseType(StatusCodes.Status204NoContent)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task GetWellSectionTypesAsync(int idWell, CancellationToken cancellationToken) - { - await AssertUserAccessToWell(idWell, cancellationToken); + await AssertUserAccessToWell(idWell, cancellationToken); - var wellSectionTypes = await wellSectionPlanRepository.GetWellSectionTypesAsync(idWell, cancellationToken); + var wellSectionId = await wellSectionPlanRepository.UpdateAsync(wellSection, cancellationToken); - if (!wellSectionTypes.Any()) - return NoContent(); + if (wellSectionId == ICrudRepository.ErrorIdNotFound) + return this.ValidationBadRequest(nameof(wellSection.Id), $"Секции скважины с Id: {wellSection.Id} не существует"); - return Ok(wellSectionTypes); - } + return Ok(wellSectionId); + } - /// - /// Получить список секций - /// - /// Идентификатор скважины - /// - /// - [HttpGet] - [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] - [ProducesResponseType(StatusCodes.Status204NoContent)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task GetPlanWellSectionsAsync(int idWell, CancellationToken cancellationToken) - { - await AssertUserAccessToWell(idWell, cancellationToken); + /// + /// Получить типы секций + /// + /// Идентификатор скважины + /// + /// + [HttpGet("wellSectionTypes")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status204NoContent)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + public async Task GetWellSectionTypesAsync(int idWell, CancellationToken cancellationToken) + { + await AssertUserAccessToWell(idWell, cancellationToken); - var planWellSections = await wellSectionPlanRepository.GetByIdWellAsync(idWell, cancellationToken); - - if (!planWellSections.Any()) - return NoContent(); + var wellSectionTypes = await wellSectionPlanRepository.GetWellSectionTypesAsync(idWell, cancellationToken); - return Ok(planWellSections); - } + if (!wellSectionTypes.Any()) + return NoContent(); - /// - /// Удалить секцию - /// - /// Идентификатор скважины - /// Идентификатор плановой секции - /// - /// - [HttpDelete] - [Permission] - [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] - [ProducesResponseType(StatusCodes.Status403Forbidden)] - public async Task DeleteAsync(int idWell, int id, CancellationToken cancellationToken) - { - await AssertUserAccessToWell(idWell, cancellationToken); + return Ok(wellSectionTypes); + } - var deletedWellSectionPlanCount = await wellSectionPlanRepository.DeleteAsync(id, cancellationToken); + /// + /// Получить список секций + /// + /// Идентификатор скважины + /// + /// + [HttpGet] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status204NoContent)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + public async Task GetPlanWellSectionsAsync(int idWell, CancellationToken cancellationToken) + { + await AssertUserAccessToWell(idWell, cancellationToken); - return Ok(deletedWellSectionPlanCount); - } + var planWellSections = await wellSectionPlanRepository.GetByIdWellAsync(idWell, cancellationToken); - //TODO: нужно создать базовый контроллер связанный со скважиной и вынести этот метод туда. Данный метод много где дублируется - private async Task AssertUserAccessToWell(int idWell, CancellationToken cancellationToken) - { - var idCompany = User.GetCompanyId(); + if (!planWellSections.Any()) + return NoContent(); - if (!idCompany.HasValue || !await wellService.IsCompanyInvolvedInWellAsync(idCompany.Value, idWell, cancellationToken)) - throw new ForbidException("Нет доступа к скважине"); - } + return Ok(planWellSections); + } - //TODO: тоже нужно вынести в базовый контроллер - private async Task CheckIsExistsWellSectionTypeAsync(int idWellSectionType, CancellationToken cancellationToken) - { - _ = await wellSectionRepository.GetOrDefaultAsync(idWellSectionType, cancellationToken) - ?? throw new ArgumentInvalidException(nameof(ProcessMapPlanWellDrillingDto.IdWellSectionType), - $"Тип секции с Id: {idWellSectionType} не найден"); - } + /// + /// Удалить секцию + /// + /// Идентификатор скважины + /// Идентификатор плановой секции + /// + /// + [HttpDelete] + [Permission] + [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + public async Task DeleteAsync(int idWell, int id, CancellationToken cancellationToken) + { + await AssertUserAccessToWell(idWell, cancellationToken); + + var deletedWellSectionPlanCount = await wellSectionPlanRepository.DeleteAsync(id, cancellationToken); + + return Ok(deletedWellSectionPlanCount); + } + + //TODO: нужно создать базовый контроллер связанный со скважиной и вынести этот метод туда. Данный метод много где дублируется + private async Task AssertUserAccessToWell(int idWell, CancellationToken cancellationToken) + { + var idCompany = User.GetCompanyId(); + + if (!idCompany.HasValue || !await wellService.IsCompanyInvolvedInWellAsync(idCompany.Value, idWell, cancellationToken)) + throw new ForbidException("Нет доступа к скважине"); + } + + //TODO: тоже нужно вынести в базовый контроллер + private async Task CheckIsExistsWellSectionTypeAsync(int idWellSectionType, CancellationToken cancellationToken) + { + _ = await wellSectionRepository.GetOrDefaultAsync(idWellSectionType, cancellationToken) + ?? throw new ArgumentInvalidException(nameof(ProcessMapPlanDrillingDto.IdWellSectionType), + $"Тип секции с Id: {idWellSectionType} не найден"); + } } \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/WellCompositeController.cs b/AsbCloudWebApi/Controllers/WellCompositeController.cs index 63ccd990..5f0c854e 100644 --- a/AsbCloudWebApi/Controllers/WellCompositeController.cs +++ b/AsbCloudWebApi/Controllers/WellCompositeController.cs @@ -1,4 +1,5 @@ using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMapPlan; using AsbCloudApp.Repositories; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; @@ -6,7 +7,6 @@ using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using AsbCloudApp.Data.ProcessMaps; namespace AsbCloudWebApi.Controllers { @@ -22,7 +22,7 @@ namespace AsbCloudWebApi.Controllers private readonly IWellCompositeRepository wellCompositeRepository; private readonly IWellService wellService; - public WellCompositeController(IWellCompositeRepository wellCompositeRepository, + public WellCompositeController(IWellCompositeRepository wellCompositeRepository, IWellService wellService) { this.wellCompositeRepository = wellCompositeRepository; @@ -73,7 +73,7 @@ namespace AsbCloudWebApi.Controllers /// [HttpGet("compositeProcessMap")] [Permission] - [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] public async Task GetCompositeProcessMap(int idWell, CancellationToken token) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false))