feat(api): ApplicationInWorkValidator добававлена валидация уникальности Application+Work

This commit is contained in:
Mikhail Kuznetsov
2024-04-16 11:08:25 +10:00
parent ce0d4c1fb0
commit 0477a400e6
2 changed files with 23 additions and 14 deletions

View File

@@ -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<ErrorModel> {
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<ErrorModel> { new ErrorModel { Message = "Ошибка при созании задания на выполнение работ" } }));

View File

@@ -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<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)
{