feat(api): ApplicationInWorkValidator добававлена валидация уникальности Application+Work
This commit is contained in:
@@ -109,15 +109,6 @@ namespace PARR.API.Controllers.V1
|
|||||||
if (!resultValidate.IsValid)
|
if (!resultValidate.IsValid)
|
||||||
return BadRequest(new Response(resultValidate.Errors));
|
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<ErrorModel> {
|
|
||||||
new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } }
|
|
||||||
));
|
|
||||||
|
|
||||||
var applicationInWork = new ApplicationsInWork
|
var applicationInWork = new ApplicationsInWork
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
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
|
applicationInWork.EsppSchValues.Add(new EsppSchValue
|
||||||
{
|
{
|
||||||
ApplicationsInWorkId = applicationInWork.Id,
|
ApplicationsInWorkId = applicationInWork.Id,
|
||||||
TypeConfigId = esppSchValue.TypeConfigId,
|
TypeConfigId = item.TypeConfigId,
|
||||||
TypeValueId = esppSchValue.TypeValueId
|
TypeValueId = item.TypeValueId
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync())
|
if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync())
|
||||||
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } }));
|
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } }));
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using PARR.API.Contracts.V1.Requests;
|
using PARR.API.Contracts.V1.Requests;
|
||||||
|
using PARR.API.Contracts.V1.Responses.Base;
|
||||||
using PARR.DAL.Services.Interfaces;
|
using PARR.DAL.Services.Interfaces;
|
||||||
|
|
||||||
namespace PARR.API.Validators
|
namespace PARR.API.Validators
|
||||||
@@ -43,7 +44,9 @@ namespace PARR.API.Validators
|
|||||||
|
|
||||||
RuleFor(t => t.ApplicationId)
|
RuleFor(t => t.ApplicationId)
|
||||||
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
|
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
|
||||||
.WithMessage("Указан несуществующий Id программного обеспечения");
|
.WithMessage("Указан несуществующий Id программного обеспечения")
|
||||||
|
.MustAsync(async (entity, value, c) => await AppInWorkIsUnique(entity))
|
||||||
|
.WithMessage("Задание на выполнение работ с такими ПО и Работой уже существует");
|
||||||
//.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения");
|
//.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения");
|
||||||
|
|
||||||
|
|
||||||
@@ -120,6 +123,21 @@ namespace PARR.API.Validators
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<bool> 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<ErrorModel> {
|
||||||
|
// new ErrorModel { Message = $"Уже существует задание на выполнение работ для программного обеспечения id({request.ApplicationId}) и работой id({request.WorkId})." } }
|
||||||
|
// ));
|
||||||
|
|
||||||
|
return existSameAiW == null;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<bool> IsWorkExist(ApplicationInWorkRequest request)
|
private async Task<bool> IsWorkExist(ApplicationInWorkRequest request)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user