From 0477a400e626fa0db7474ea8f2d1bb4e50f823c3 Mon Sep 17 00:00:00 2001 From: Mikhail Kuznetsov Date: Tue, 16 Apr 2024 11:08:25 +1000 Subject: [PATCH] =?UTF-8?q?feat(api):=20ApplicationInWorkValidator=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=83=D0=BD=D0=B8=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20Application+Work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V1/ApplicationInWorkController.cs | 17 ++++------------ .../Validators/ApplicationInWorkValidator.cs | 20 ++++++++++++++++++- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/PARR.API/Controllers/V1/ApplicationInWorkController.cs b/PARR.API/Controllers/V1/ApplicationInWorkController.cs index 85a7e66a..71f4c03e 100644 --- a/PARR.API/Controllers/V1/ApplicationInWorkController.cs +++ b/PARR.API/Controllers/V1/ApplicationInWorkController.cs @@ -109,15 +109,6 @@ namespace PARR.API.Controllers.V1 if (!resultValidate.IsValid) return BadRequest(new Response(resultValidate.Errors)); - var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId); - - //TODO: тут спорно, нужна ли эта проверка? Мы же можем создать несколько РР на одно и тоже ПО но с разным расписанием? - //к тому же, в методе update, такой проверки нет! - if (existSameAiW != null) - return BadRequest(new Response(false, new List { - new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } } - )); - var applicationInWork = new ApplicationsInWork { Id = Guid.NewGuid(), @@ -135,15 +126,15 @@ namespace PARR.API.Controllers.V1 }; //Добавляем настройки планировщика - foreach (var esppSchValue in request.Schedule) + request.Schedule.ForEach(item => { applicationInWork.EsppSchValues.Add(new EsppSchValue { ApplicationsInWorkId = applicationInWork.Id, - TypeConfigId = esppSchValue.TypeConfigId, - TypeValueId = esppSchValue.TypeValueId + TypeConfigId = item.TypeConfigId, + TypeValueId = item.TypeValueId }); - } + }); if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync()) return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } })); diff --git a/PARR.API/Validators/ApplicationInWorkValidator.cs b/PARR.API/Validators/ApplicationInWorkValidator.cs index 79a40ccf..8acbdfe0 100644 --- a/PARR.API/Validators/ApplicationInWorkValidator.cs +++ b/PARR.API/Validators/ApplicationInWorkValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using PARR.API.Contracts.V1.Requests; +using PARR.API.Contracts.V1.Responses.Base; using PARR.DAL.Services.Interfaces; namespace PARR.API.Validators @@ -43,7 +44,9 @@ namespace PARR.API.Validators RuleFor(t => t.ApplicationId) .MustAsync(async (entity, value, c) => await IsApplicationExist(entity)) - .WithMessage("Указан несуществующий Id программного обеспечения"); + .WithMessage("Указан несуществующий Id программного обеспечения") + .MustAsync(async (entity, value, c) => await AppInWorkIsUnique(entity)) + .WithMessage("Задание на выполнение работ с такими ПО и Работой уже существует"); //.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения"); @@ -120,6 +123,21 @@ namespace PARR.API.Validators return true; } + private async Task AppInWorkIsUnique(ApplicationInWorkRequest request) + { + //уникальная запись по полям ApplicationId, WorkId + + var existSameAiW = await applicationsInWorkService.GetAsync(request.ApplicationId, request.WorkId); + + //TODO: тут спорно, нужна ли эта проверка? Мы же можем создать несколько РР на одно и тоже ПО но с разным расписанием? + //к тому же, в методе update, такой проверки нет! + //if (existSameAiW != null) + // return BadRequest(new Response(false, new List { + // new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } } + // )); + + return existSameAiW == null; + } private async Task IsWorkExist(ApplicationInWorkRequest request) {