From e2764504aa80d6b4aaa6027e9358762dd37eead9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 16 Feb 2024 11:54:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=BB=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interfaces/IControllerWithParser.cs | 22 ---------- .../ProcessMapPlanBaseController.cs | 38 +++++++++------- .../ProcessMapPlanDrillingController.cs | 6 +-- .../TrajectoryEditableController.cs | 43 +++++++++++-------- .../TrajectoryFactManualController.cs | 11 ++--- .../Trajectory/TrajectoryPlanController.cs | 10 ++--- AsbCloudWebApi/Extensions.cs | 25 ++++------- 7 files changed, 63 insertions(+), 92 deletions(-) delete mode 100644 AsbCloudWebApi/Controllers/Interfaces/IControllerWithParser.cs diff --git a/AsbCloudWebApi/Controllers/Interfaces/IControllerWithParser.cs b/AsbCloudWebApi/Controllers/Interfaces/IControllerWithParser.cs deleted file mode 100644 index e47d644b..00000000 --- a/AsbCloudWebApi/Controllers/Interfaces/IControllerWithParser.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; -using AsbCloudApp.Data; -using AsbCloudApp.Requests.ParserOptions; -using AsbCloudApp.Services; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; - -namespace AsbCloudWebApi.Controllers.Interfaces; - -public interface IWellControllerWithParser - where TDto : class, IId - where TOptions : class, IParserOptionsRequest -{ - IParserService ParserService { get; } - - Task>> Parse(int idWell, - [FromForm] IFormFileCollection files, - CancellationToken token); - - IActionResult GetTemplate(); -} \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanBaseController.cs b/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanBaseController.cs index f630059c..9c0c8594 100644 --- a/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanBaseController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanBaseController.cs @@ -9,12 +9,12 @@ using Microsoft.AspNetCore.Http; using AsbCloudApp.Exceptions; using AsbCloudApp.Requests; using System; +using System.IO; using AsbCloudApp.Services; using System.Linq; using AsbCloudApp.Data; using AsbCloudApp.Requests.ParserOptions; using AsbCloudInfrastructure.Services.Parser; -using AsbCloudWebApi.Controllers.Interfaces; namespace AsbCloudWebApi.Controllers.ProcessMapPlan; @@ -24,29 +24,25 @@ namespace AsbCloudWebApi.Controllers.ProcessMapPlan; [ApiController] [Route("api/well/{idWell}/[controller]")] [Authorize] -public abstract class ProcessMapPlanBaseController : ControllerBase, - IWellControllerWithParser +public abstract class ProcessMapPlanBaseController : ControllerBase where TDto : ProcessMapPlanBaseDto { private readonly IChangeLogRepository repository; private readonly IWellService wellService; - + private readonly ParserExcelService parserService; + protected ProcessMapPlanBaseController(IChangeLogRepository repository, IWellService wellService, - ParserServiceFactory parserFactory, - int idParserService) + ParserExcelService parserService) { this.repository = repository; this.wellService = wellService; - - ParserService = parserFactory.Create(idParserService); + this.parserService = parserService; } - - public IParserService ParserService { get; } - - protected abstract string TemplateFileName { get; } - /// + protected abstract string TemplateFileName { get; } + + /// /// Добавление /// /// @@ -220,8 +216,18 @@ public abstract class ProcessMapPlanBaseController : ControllerBase, CancellationToken token) { await AssertUserHasAccessToWell(idWell, token); - - return this.ParseExcelFile(files, IParserOptionsRequest.Empty()); + + var stream = files.GetExcelFile(); + + try + { + var dto = parserService.Parse(stream, IParserOptionsRequest.Empty()); + return Ok(dto); + } + catch (FileFormatException ex) + { + return this.ValidationBadRequest(nameof(files), ex.Message); + } } /// @@ -234,7 +240,7 @@ public abstract class ProcessMapPlanBaseController : ControllerBase, [ProducesResponseType(StatusCodes.Status204NoContent)] public IActionResult GetTemplate() { - var stream = ParserService.GetTemplateFile(); + var stream = parserService.GetTemplateFile(); return File(stream, "application/octet-stream", TemplateFileName); } diff --git a/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanDrillingController.cs b/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanDrillingController.cs index ed2e9b35..a22676d8 100644 --- a/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanDrillingController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMapPlan/ProcessMapPlanDrillingController.cs @@ -2,7 +2,7 @@ using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; -using AsbCloudInfrastructure.Services.Parser; +using AsbCloudInfrastructure.Services.ProcessMapPlan.Parser; namespace AsbCloudWebApi.Controllers.ProcessMapPlan; @@ -10,8 +10,8 @@ public class ProcessMapPlanDrillingController : ProcessMapPlanBaseController repository, IWellService wellService, - ParserServiceFactory parserFactory) - : base(repository, wellService, parserFactory, ParserIds.IdProcessMapPlanDrillingParser) + ProcessMapPlanDrillingParser parserService) + : base(repository, wellService, parserService) { } diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs index d96b1491..344ed707 100644 --- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs +++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryEditableController.cs @@ -1,4 +1,5 @@ -using AsbCloudApp.Data.Trajectory; +using System; +using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services.Trajectory.Export; @@ -6,12 +7,12 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; +using System.IO; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Requests.ParserOptions; using AsbCloudInfrastructure.Services.Parser; -using AsbCloudWebApi.Controllers.Interfaces; namespace AsbCloudWebApi.Controllers.Trajectory { @@ -21,28 +22,22 @@ namespace AsbCloudWebApi.Controllers.Trajectory /// [ApiController] [Authorize] - public abstract class TrajectoryEditableController : TrajectoryController, - IWellControllerWithParser - where TDto : TrajectoryGeoDto - { + public abstract class TrajectoryEditableController : TrajectoryController + where TDto : TrajectoryGeoDto + { + private readonly ParserExcelService parserService; private readonly ITrajectoryEditableRepository trajectoryRepository; protected TrajectoryEditableController(IWellService wellService, - ParserServiceFactory parserServiceFactory, + ParserExcelService parserService, TrajectoryExportService trajectoryExportService, - ITrajectoryEditableRepository trajectoryRepository, - int idParserService) - : base( - wellService, - trajectoryExportService, - trajectoryRepository) - { + ITrajectoryEditableRepository trajectoryRepository) + : base(wellService, trajectoryExportService, trajectoryRepository) + { + this.parserService = parserService; this.trajectoryRepository = trajectoryRepository; - ParserService = parserServiceFactory.Create(idParserService); } - public IParserService ParserService { get; } - /// /// Возвращает excel шаблон для заполнения строк траектории /// @@ -53,7 +48,7 @@ namespace AsbCloudWebApi.Controllers.Trajectory [ProducesResponseType(StatusCodes.Status204NoContent)] public IActionResult GetTemplate() { - var stream = ParserService.GetTemplateFile(); + var stream = parserService.GetTemplateFile(); return File(stream, "application/octet-stream", fileName); } @@ -79,7 +74,17 @@ namespace AsbCloudWebApi.Controllers.Trajectory if (!await CanUserAccessToWellAsync(idWell, token)) return Forbid(); - return this.ParseExcelFile(files, IParserOptionsRequest.Empty()); + var stream = files.GetExcelFile(); + + try + { + var dto = parserService.Parse(stream, IParserOptionsRequest.Empty()); + return Ok(dto); + } + catch (FileFormatException ex) + { + return this.ValidationBadRequest(nameof(files), ex.Message); + } } /// diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs index 2317c1ff..aa1a60dc 100644 --- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs +++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryFactManualController.cs @@ -1,9 +1,8 @@ using AsbCloudApp.Data.Trajectory; using AsbCloudApp.Repositories; using AsbCloudApp.Services; -using AsbCloudInfrastructure; -using AsbCloudInfrastructure.Services.Parser; using AsbCloudInfrastructure.Services.Trajectory.Export; +using AsbCloudInfrastructure.Services.Trajectory.Parser; using Microsoft.AspNetCore.Mvc; namespace AsbCloudWebApi.Controllers.Trajectory; @@ -19,13 +18,9 @@ public class TrajectoryFactManualController : TrajectoryEditableController trajectoryRepository) - : base(wellService, - parserServiceFactory, - trajectoryExportService, - trajectoryRepository, - ParserIds.IdTrajectoryFactManualParser) + : base(wellService, parserService, trajectoryExportService, trajectoryRepository) { } } \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs index 248730ba..bffd7d15 100644 --- a/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs +++ b/AsbCloudWebApi/Controllers/Trajectory/TrajectoryPlanController.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using AsbCloudInfrastructure.Services.Parser; +using AsbCloudInfrastructure.Services.Trajectory.Parser; namespace AsbCloudWebApi.Controllers.Trajectory { @@ -23,15 +23,11 @@ namespace AsbCloudWebApi.Controllers.Trajectory protected override string fileName => "ЕЦП_шаблон_файла_плановая_траектория.xlsx"; public TrajectoryPlanController(IWellService wellService, + TrajectoryPlanParser parserService, TrajectoryPlanExportService trajectoryExportService, - ParserServiceFactory parserServiceFactory, ITrajectoryEditableRepository trajectoryRepository, TrajectoryService trajectoryVisualizationService) - : base(wellService, - parserServiceFactory, - trajectoryExportService, - trajectoryRepository, - ParserIds.IdTrajectoryPlanParser) + : base(wellService, parserService, trajectoryExportService, trajectoryRepository) { this.trajectoryVisualizationService = trajectoryVisualizationService; } diff --git a/AsbCloudWebApi/Extensions.cs b/AsbCloudWebApi/Extensions.cs index b78a9745..59c72e37 100644 --- a/AsbCloudWebApi/Extensions.cs +++ b/AsbCloudWebApi/Extensions.cs @@ -8,8 +8,9 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Security.Claims; using AsbCloudApp.Data; +using AsbCloudApp.Exceptions; using AsbCloudApp.Requests.ParserOptions; -using AsbCloudWebApi.Controllers.Interfaces; +using AsbCloudInfrastructure.Services.Parser; using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Mvc; @@ -96,30 +97,20 @@ public static class Extensions } /// - /// Вызов парсера со стандартной валидацией входного файла + /// Получение Excel /// - /// - /// - /// /// - /// /// - public static ActionResult> ParseExcelFile( - this IWellControllerWithParser controller, - IFormFileCollection files, - TOptions options) - where TDto : class, IId - where TOptions : class, IParserOptionsRequest + /// + public static Stream GetExcelFile(this IFormFileCollection files) { if (files.Count < 1) - return MakeBadRequestObjectResult(nameof(files), "Нет файла"); + throw new ArgumentInvalidException(nameof(files), "Нет файла"); var file = files[0]; if (Path.GetExtension(file.FileName).ToLower() != ".xlsx") - return MakeBadRequestObjectResult(nameof(files), "Требуется .xlsx файл."); + throw new ArgumentInvalidException(nameof(files), "Требуется .xlsx файл."); - var stream = file.OpenReadStream(); - - return controller.ParserService.Parse(stream, options); + return file.OpenReadStream(); } } \ No newline at end of file